我在C ++代码中进行了以下检查:
if (not obj.someBoolean) {
// some code
} else {
// some other code
}
打印声明或gdb确认obj.someBoolean
(bool
变量)为false
。
然而,在使用else
运算符时,控件转到not
块。
有趣的是,在上述场景中使用!
种类的运算符时,它会正常工作(进入if
块)。
这是我使用not
的方式的问题吗?
更新(有关该方案的更多详细信息):
在整个代码中,我在很多地方使用过not
。但这是一个出现此问题的情况(始终如一)。
即使以下代码有效(转到if
阻止):
bool temp = not obj.someBoolean;
if (temp) {
// some code
} else {
// some other code
}
这更像是一个正在发生的随机点 我很好奇为什么会导致这种行为。
答案 0 :(得分:2)
我几乎只在C ++中使用not
,and
和or
(我发现它们比它们的符号更易读,更不容易出错)。它们严格等效。
§2.6替代令牌[lex.digraph]
1 / 为某些运营商和标点符号提供了替代令牌表示。
2 / 在语言的所有方面,除了拼写之外,每个备用标记的行为分别与其主标记相同。表2中定义了替代令牌集。
看看其他地方。
答案 1 :(得分:1)
我看不出你的代码有什么问题。试试这个:
#include <iostream>
int main()
{
if(not false) std::cout<< "true!";
}
如果打印“true!”,则问题出在其他地方。