使用单词变体C ++而不是运算符时出现奇怪的错误

时间:2012-11-07 12:09:42

标签: c++ boolean

我在C ++代码中进行了以下检查:

if (not obj.someBoolean) {
      // some code
} else {
      // some other code
}   

打印声明或gdb确认obj.someBooleanbool变量)为false
然而,在使用else运算符时,控件转到not块。

有趣的是,在上述场景中使用!种类的运算符时,它会正常工作(进入if块)。

这是我使用not的方式的问题吗?

更新(有关该方案的更多详细信息):

在整个代码中,我在很多地方使用过not。但这是一个出现此问题的情况(始终如一)。

即使以下代码有效(转到if阻止):

bool temp = not obj.someBoolean;
if (temp) {
      // some code
} else {
      // some other code
}     

这更像是一个正在发生的随机点 我很好奇为什么会导致这种行为。

2 个答案:

答案 0 :(得分:2)

我几乎只在C ++中使用notandor(我发现它们比它们的符号更易读,更不容易出错)。它们严格等效。

  

§2.6替代令牌[lex.digraph]

     

1 / 为某些运营商和标点符号提供了替代令牌表示。

     

2 / 在语言的所有方面,除了拼写之外,每个备用标记的行为分别与其主标记相同。表2中定义了替代令牌集。

看看其他地方。

答案 1 :(得分:1)

我看不出你的代码有什么问题。试试这个:

#include <iostream>

int main()
{
  if(not false) std::cout<< "true!"; 
}

如果打印“true!”,则问题出在其他地方。