代码之家  ›  专栏  ›  技术社区  ›  golightlydev

Visual Studio为什么给出“关系表达式作为切换表达式”的警告?

  •  1
  • golightlydev  · 技术社区  · 2 年前

    我有以下代码:

    float x = 0.43;
    float y = 1.56;
    size_t largerValueIndex = 1;
    size_t smallerValueIndex = 0;
    switch (x > y) {
    case 1:
        largerValueIndex = 0;
        smallerValueIndex = 1;
        break;
    }
    

    Visual Studio发出警告“C4144:'>':关系表达式作为开关语句”。

    我想知道的是,为什么警告是必要的?我的印象是,大多数switch和if语句都是两个值之间的比较。这被认为是不好的做法吗?如果是,为什么?

    我的问题与用作开关表达式的值有关,而不是那些情况。

    2 回复  |  直到 2 年前
        1
  •  1
  •   Dave S    2 年前

    表达式 (x >y) 计算为布尔值true和false,这两个值转换为0和1,如@pady和@user4581301所示(请参阅 https://timsong-cpp.github.io/cppwp/conv.integral#2 )

    While switch ( -relational expression- ) 是合法的,通常不使用,因为只有两个值和 if ( expression ) { ...true code... } else { ...false code... } 更容易理解。

    开关通常用于一个整数变量或表达式,以有效地列出期望值,而不是长链 if...else if...else if...else

        2
  •  1
  •   M.M    2 年前

    尽管代码是正确的, switch 通常用于具有两种以上可能结果的场景;只有两种可能结果的测试应该是 if .

    编译器对此发出警告,因为意外使用了 转换 可能表示拼写错误或逻辑错误。