【问题标题】:"and"/"or" instead of "&&"/"||" in C++ code - compiler feature or programmer's fault? [duplicate]“和”/“或”而不是“&&”/“||”在 C++ 代码中 - 编译器功能或程序员的错? [复制]
【发布时间】:2011-03-27 18:30:31
【问题描述】:

可能重复:
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 没有在任何地方声明,即使是宏。 代码中也很少有ands。 因此,项目没有建立在 VC2008 Express 上。给我代码的人说作者一直在使用mingw编译器。

问题:这是一个非标准的编译器功能(我对此表示怀疑),这是较新的 C++ 标准的一部分(我没有看过 C++0x),还是这是程序员的问题(如果这家伙从帕斯卡搬来,他可能因为习惯而使用和/或代替&&/||,或者因为他认为它更“可读”)。

【问题讨论】:

    标签: c++


    【解决方案1】:

    It’s part of the C++ standard 并适用于所有现代的、符合标准的 C++ 编译器。

    对于 Visual C++,这意味着将 /permissive- flag 传递给编译器,无论如何都建议这样做(此标志由 Visual Studio 2017 及更高版本默认设置)。

    【讨论】:

    • 我也更喜欢这种风格,尤其是not,它比!更具可读性。
    • 问题是这种情况很少见,当它弹出时,任何没有经验的程序员都会去 WTF 并在 stackoverflow 上发布问题。所以在我看来,使用这些结构是个坏主意,因为它们使代码更难维护(因为你必须实际查找它们的含义)。
    • @Martin 你宁愿人们用二合字母代替吗?这些名称是供那些键盘上没有所需符号的人使用的,或者至少这是最初的意图。
    • @Martin York: “任何没有经验的程序员都会 WTF”直到今天才在 C++ 代码中看到“或”。有趣的是,这可能是因为所有使用微软编译器的人。
    • @Martin:按照同样的逻辑,你也不能使用条件运算符——我已经记不清有多少 初学者被这个绊倒了。哎呀,按照相同的逻辑,您必须避免使用 RAII、SFINAE 和智能指针。所以不行。只是……不。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 1970-01-01
      • 2014-04-09
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多