【问题标题】:Strange error while using word variation C++ not operator使用单词变体C ++ not operator时出现奇怪的错误
【发布时间】:2012-11-07 12:09:42
【问题描述】:

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

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

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

有趣的是,运算符的! 变体在上述场景中使用时可以正常工作(进入if 块)。

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

更新(关于场景的更多细节):

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

即使以下代码也有效(转到if 块):

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

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

【问题讨论】:

  • 您使用的是什么编译器以及它的哪个版本?
  • 这是我第一次看到not,但我找不到任何参考资料(谷歌搜索“不”很难......)如果你有!,你为什么要使用它?跨度>
  • @Fixxxer 这确实是 C++ 中的 alternative operator 关键字。否则 OP 会得到一个编译错误,而不是生成明显错误的代码。
  • @eternalthinker 你确定你没有在某处定义宏 not 吗?
  • 能否提供一个小代码示例来编译和重现问题?

标签: c++ boolean


【解决方案1】:

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

§2.6 替代标记 [lex.digraph]

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

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

看看别处。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 这不是答案,是评论
    • @DenisErmolin 没有答案。
    • 那你为什么把它发布为答案?
    • @LewsTherin 它被称为测试用例。我没有说“做一个测试用例”,而是把它写下来。
    • 对一些涉及. 运算符的对象进行类似测试,这更像是问题中的代码:codepad.org/xb1K16tp
    猜你喜欢
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 2013-05-05
    • 2012-05-05
    • 2011-06-16
    • 1970-01-01
    相关资源
    最近更新 更多