代码之家  ›  专栏  ›  技术社区  ›  SigTerm

“和”或“或”而不是“&”/“”,在C++代码编译程序中还是程序员的错误?[复制品]

c++
  •  5
  • SigTerm  · 技术社区  · 16 年前

    可能重复:
    or is not valid C++ : why does this code compile ?

    你好。

    我最近遇到了别人编写的不寻常的C++代码:

    bool operator != (Point p1, Point p2)
    {
        return p1.X != p2.X or p1.Y != p2.Y or p1.Z != p2.Z;
    };
    

    据我所知, or 没有在任何地方声明,即使是宏。 也有一些 and 代码中的S。 因此,该项目不基于VC2008 Express。给我代码的人说作者一直在使用mingw编译器。

    问题:这是一个非标准编译器特性(我怀疑它),这是一个新的C++标准的一部分(我还没有看C++0X),或者这是程序员的问题(如果这个家伙从PASCAL移动,他本来可以使用和/或代替 && / || 因为习惯,或者因为他认为它更“可读”)。

    2 回复  |  直到 10 年前
        1
  •  15
  •   Community Mohan Dere    9 年前

    它是C++标准的一部分。不幸的是,VisualC++不允许默认启用该部分,并且 Microsoft’s answer to a bug report is “won’t fix, since nobody uses this.”

    修复Visual C++, you need to disable the Microsoft language extensions 在编译器中,可以使用命令行选项 /Za .

    或者,一个简单的解决方法是包括头部 <ciso646> 它为不兼容的编译器定义这些关键字。

    (我是为数不多的喜欢这种风格的人之一,而且我对微软强迫我使用ASCII汤而不是干净的英文单词使我的代码便于携带有点生气。)

        2
  •  4
  •   anon    16 年前

    它实际上是当前C++标准的一部分(参见第2.5部分/第1部分),但是您可能需要做一些事情以使它们在特定的实现中得以实现。

    以下是从标准中提取的列表,我可能在这个过程中搞砸了:

    and && 
    and_eq &=
    bitor | 
    or ||
    or_eq |=
    xor_eq ^= 
    xor ^ 
    not !
    compl ~ 
    not_eq != 
    bitand &