3

我的 C++ 代码中有以下检查:

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

打印语句或 gdb 确认obj.someBooleanbool变量)是false.
然而,在使用操作员时,控件进入了elsenot

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

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

更新(有关该场景的更多详细信息):

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

甚至以下代码也有效(if阻塞):

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

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

4

2 回答 2

2

我使用not,and并且or几乎只在 C++ 中使用(我发现它们比对应的 sigils 更具可读性和更不容易出错)。它们是严格等价的。

§2.6 替代标记 [lex.digraph]

1/为某些运算符和标点符号提供了替代标记表示。

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

看看别处。

于 2012-11-07T12:51:42.710 回答
1

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

#include <iostream>

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

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

于 2012-11-07T12:14:44.610 回答