C++ C++;?

C++ C++;?,c++,C++,前言 这个问题是指使用诸如if()。。。否则或类似。 答案旨在描述运行时的意外行为、语法缺陷和误解,如 这里不应该提到 解决的问题 对条件表达式的误解 相等比较使用==表示=是一个赋值,结果将作为对bool的强制转换进行评估。即,任何评估为!=0结果为真。作为预防机制,请考虑下面的表达式: 通过始终将常量放在表达式的左侧,可以避免错误使用赋值运算符。编译器将标记触发无效赋值错误的任何错误 变化:if(答案='y','y') 条件必须通过单独的比较进行测试。|操作符绑定不能实现

前言

这个问题是指使用诸如
if()。。。否则
或类似。 答案旨在描述运行时的意外行为、语法缺陷和误解,如

这里不应该提到


解决的问题
对条件表达式的误解
  • 相等比较使用
    ==
    表示<代码>=是一个赋值,结果将作为对
    bool
    的强制转换进行评估。即,任何评估为
    !=0
    结果为
    。作为预防机制,请考虑下面的表达式:

  • 通过始终将常量放在表达式的左侧,可以避免错误使用赋值运算符。编译器将标记触发无效赋值错误的任何错误

  • 变化:
    if(答案='y','y')

    条件必须通过单独的比较进行测试。
    |
    操作符绑定不能实现此处所期望的功能。改用
    if(答案==“y”|答案==“y”)

  • if(0
    Python中的有效语法,在预期的行为中,语法在C++中有效,但解析为<代码>((0×x)< 42)<(代码> >所以<代码> false <代码> > />代码>真/ <代码>转换为<代码> 0 <代码> /<代码> 1 > /代码>,然后测试<代码> < 42 <代码> > >始终>代码>真< /COD>。 条件必须通过单独的比较进行测试:
    if(0

格式和范围错误
  • 有多余的
    if()
    语句之后

  • 代码相当于

    if(mycondition) {
         statement1();
    }
    statement2();
    
    if(mycondition) {
     if (mycondition2)
         statement1();
     else
         statement2();
    }
    
    statement2()不在条件块的范围内。将
    {}
    添加到组语句中

  • 代码相当于

    if(mycondition) {
         statement1();
    }
    statement2();
    
    if(mycondition) {
     if (mycondition2)
         statement1();
     else
         statement2();
    }
    
    else
    应用于上一个
    if
    。添加
    {}

    if (mycondition) {
        if (mycondition2)
             statement1();
    }
    else
        statement2();
    

这同样适用于任何错误放置的
循环内语句,如

  • for(int x=0;x<5;++x);
    // ^
    {
    //语句只执行一次
    }
    

  • while(x<5);
    // ^
    {
    //语句只执行一次
    }
    
错误方向的潜在缺失else子句

{}的有趣位置,因为它们添加了它们,放错了它们,然后删除了错误的

if (a) {
}
if (b) {
}
if (c) {
}

遗漏其他内容,因为即使更多内容是真实的,也应该只做其中一项。

一个好的编译器至少会对您能想到的任何事情发出警告。对于Stackoverflow.com来说,这不是一个好问题。我想我已经在CodeComplete2或其他地方读过类似的内容……虽然这个规范背后的思想非常好,但我认为它根本不能保证一个规范的dup。新手会因为打字错误而陷入其中。他们的问题是印刷问题。所以它应该作为一个整体关闭,这很好。问题是,如果他们的帖子是以重复的形式而不是“打字错误”关闭的,系统不会自动删除它。所以,我们将开始集体保留这些白噪声问题。@user0042-是的。除非你刚刚将他们的最低保留期从9天增加到30天,甚至一整年。
if(mycondition)
     statement1();
     statement2(); // Why this code is always executed ???
if(mycondition) {
     statement1();
}
statement2();
if (mycondition)
     if (mycondition2)
         statement1();
 else
     statement2();
if(mycondition) {
 if (mycondition2)
     statement1();
 else
     statement2();
}
if (mycondition) {
    if (mycondition2)
         statement1();
}
else
    statement2();
  for(int x = 0;x < 5;++x);
                       // ^
  {
       // statements executed only once
  }
while(x < 5);
         // ^
{
    // statements executed only once
}
if (north) {

} else if (south) {

} else if (west) {

} else if (east) {

}
if (a) {
}
if (b) {
}
if (c) {
}