【问题标题】:bitwise operator variations in C++C++ 中的按位运算符变体
【发布时间】:2009-06-13 22:33:56
【问题描述】:

我读到 C++ 为通常的 &、| 和 ! 提供了额外的运算符。它们分别是“and”、“or”和“not”,并且在适用的情况下还具有自动短路特性。

我想在我的代码中使用这些运算符,但编译器将它们解释为标识符并引发错误。

我正在使用带有 SP1 的 Visual C++ 2008 Express Edition。如何激活这些运算符以在我的代码中使用?

【问题讨论】:

    标签: c++ bit-manipulation operators


    【解决方案1】:

    如果您想在 MSVC++ 中使用“and”、“or”、“xor”等关键字版本的运算符,则必须使用“/Za”选项禁用扩展或者你必须包含iso646.h

    【讨论】:

    • @Micheal:太好了,你成就了我的一天。非常感谢:D。
    • 度过了愉快的一天,我强烈建议避免为操作员使用“替代令牌”。我认为大多数阅读代码的 C++ 程序员更愿意看到常用的运算符。
    • 那么,我认为是时候做出改变了。我们应该用我们的变量名和类似的权利来获得更多的描述性(我敢打赌,如果你看到 int i = 3.142;,你会尖叫)。在我看来,标记“和”比 & 或 && 更具描述性
    • 我知道这是意见或风格的问题,但我认为人们习惯了标点符号风格的标记,并且会发现关键字变体是他们必须“停下来思考”的东西。我目前正在开展一个项目,其中现有代码主要使用宏作为逻辑运算符(AND、OR、NEQ 等),我必须说我根本不喜欢它......我相信替代关键字标记是主要用于帮助使用非美国键盘的程序员,这些键盘并不总是有正确的标点字符,而不是试图使它们更具可读性(只是更易于打字)。
    • 使用符号样式的一个好处是扫描代码时很容易区分运算符和变量。当一切都是字母数字文本时,这要困难得多。
    【解决方案2】:

    传统的 C++ 拼写 [*](就像在 C 中一样)是 && 表示“逻辑”,短路 || 表示“逻辑”,短路 ! 是“合乎逻辑的”不是(当然它不会短路:那是什么意思意味着?!-)。位版本为&|~

    根据 C++ 标准,您喜欢的拼写(andor 等)也应该实现,但显然流行的编译器不遵守该规则。但是,您应该能够 #include <ciso646>#include <iso646.h> 通过宏来解决这个问题 - 请参阅 this page,如果您最喜欢的编译器缺少这些头文件,只需以明显的方式创建它们,即,

    #define and &&
    #define or ||
    

    等等。 (感谢评论者让我更好地研究这个问题并找出答案!)

    【讨论】:

    • C++ 标准的最新版本包括“and”和“or”等拼写。
    • @Greg 好点,在可能的未来标准上添加了一个脚注(尽管或多或少只是此时此刻的“学术”兴趣;-)。
    • 'and'、'bitor'、'or'、'xor'、'compl'、'bitand'、'and_eq'、'or_eq'、'xor_eq'、'not' 和 'not_eq ' 都是 '&&'、'|'、'||'、'^'、'~'、'&'、'&='、'|='、'^='、'!' 的有效替代标记和 '!=' 分别在当前标准 (2003) 中。
    • VC 2008 不严格兼容,请参见此处:stackoverflow.com/questions/198402/…
    • and、or、bitand 等关键字在最初的 1998 C++ 标准中定义 - 请参阅第 2.4 节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    相关资源
    最近更新 更多