VS2008 c ++编译器会优化以下if语句吗?

Ham*_*jan 0 c++ compiler-construction optimization coding-style code-readability

if (false == x) { ...}
Run Code Online (Sandbox Code Playgroud)

而不是:

if (!x) { ... }
Run Code Online (Sandbox Code Playgroud)

if (false == f1()) { ...}
Run Code Online (Sandbox Code Playgroud)

而不是:

if (!f1()) { ... }
Run Code Online (Sandbox Code Playgroud)

我认为if(假= = ......版本更具可读性.你同意,或者你可以提出另一个技巧吗?它会一样快吗?谢谢.

这就是我不喜欢的原因!x:

if (25 == a->function1(12345, 6789) &&
    45 == b->function1(12345, 6789) &&
    !c->someOtherFunction(123)) { ... }
Run Code Online (Sandbox Code Playgroud)

以下似乎更好:

if (25 == a->function1(12345, 6789) &&
    45 == b->function1(12345, 6789) &&
    false == c->someOtherFunction(123)) { ... }
Run Code Online (Sandbox Code Playgroud)

Bil*_*eal 7

我个人觉得这个表格if (!x) { ... }最具可读性,但现在它们都会产生相同的代码.

编辑:在您的示例中,我将执行以下操作:

if (  a->function1(12345, 6789) == 25 &&
      b->function1(12345, 6789) == 45 &&
    !(c->someOtherFunction(123))) { ... }
Run Code Online (Sandbox Code Playgroud)

但这真的只是个人偏好的事情.做你最可读的事情.它不会有任何区别.

  • +1."if(n == true)"范例是一个可怕的怪物:-) (8认同)

jal*_*alf 7

我认为if(假== ......版本更具可读性.你同意,或者你可以提出另一个技巧?

你这样做是错的.

false == x返回一个bool,显然必须与之比较true!

if (true == (false == x)) { ...}会更好.但是这又会返回一个bool,所以为了安全起见,让你的代码更具可读性,我们最好这样做:

if (true == (true == (false == x))) { ...}.等等.一旦你开始将布尔值与布尔值进行比较,你会在哪里停止?结果总是另一个布尔值,为了保持一致,你必须将它与布尔值进行比较.

或者您可以学习理解您正在使用的语言,并使用它if (!x) { ...},它可以准确地表达您想要的语言.

您认为哪个更具可读性?

  • if (false == x) { ...} 转换为"如果false等于x则为真".
  • if (!x) { ...} 转换为"如果x不是真的".

老实说,真的,真的说第一种形式"更具可读性"吗?你能用一句话说吗?"如果false等于x,那么这是真的吗?"

它不是更具可读性,它只是向任何程序员读取你的代码"我不理解if语句或布尔值".

  • 还原+1 adirdum(crikey,我希望我拼写正确),特别是逻辑端点:如果确实它是真的那么......它是真的,x是假的. (3认同)
  • 我从来没有发现它不明显.如果你愿意,你可以用空格分隔它(`if(!x)`).或者使用`not`关键字而不是`!`.它并不常用(所以它可能会让一些程序员阅读你的代码感到困惑),但它是标准C++的一部分. (3认同)