and, or, not 与 &&, ||, ! [关闭]

Posted

技术标签:

【中文标题】and, or, not 与 &&, ||, ! [关闭]【英文标题】:and, or, not versus &&, ||, ! [closed] 【发布时间】:2011-07-14 01:15:37 【问题描述】:

是的,这是有效的 C++:

if (false or (true and not false)) ...

Among others 例如bitandxor。在 C 中,它们曾经是宏,但现在它们是 are keywords !你甚至可以超载它们!那为什么有人会教或写类似的东西:

if (false || (true && !(false))) ...

为什么没有人使用它们?

【问题讨论】:

“在 C 中,它们曾经是宏” 不,它们从来都不是“在 C 中”的宏,尽管某些单独的 C 程序可能已经定义了这样的宏。这不是一个真正的问题,而是固执己见和争论不休——请参阅常见问题解答。 Is anybody using the named boolean operators? Which C++ logical operators do you use: and, or, not and the ilk or C style operators? why? 的可能重复项;另见C++ alternative tokens?Is it possible to turn off support for “and” / “or” boolean operator usage in gcc? @Jim Balter:但在 C 中,它们宏,在iso646.h 中定义。 @phresnel 我已经纠正了。但是,声称它们曾经是宏但现在是 C 中的关键字的说法是错误的……它们仍然是 C 中的宏。 @Jim Balter:没错,我的评论是针对你和 OP 的。不幸的是,一个人无法 [at]ify 多个用户。 【参考方案1】:

因为它们不允许在不包含额外头文件的情况下混合 C/C++ 代码,所以程序员不太了解,而且目前尚不清楚and 是短路版本还是按位版本。

【讨论】:

是的,在&&& 之间,比andbitand 之间更容易猜测哪个是位运算符。不幸的是,not_eq 是一个关系,而or_eq 是一个复合赋值运算符,具有讽刺意味的是它是按位的。【参考方案2】:

为什么没人?有些人使用它们。其他人认为符号比文字更具可读性。

【讨论】:

【参考方案3】:

Visual C++ 不支持它们。

【讨论】:

Microsoft Visual C++ 需要包含 才能使用这些标识符,从而为应该使用基本语言的内容添加了另一个无用的依赖项。 (或者不应该,但不应该坐在中间的某个地方)【参考方案4】:

人们只是不知道他们(我直到现在才知道)。

【讨论】:

以上是关于and, or, not 与 &&, ||, ! [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

ValueError 1:无法将列转换为布尔值:请使用 '&' 表示 'and'、'|' for 'or', '~' for 'not' 在构建 DataFrame 布尔表达式时

C ++ and,or,not,xor 关键字[重复]

SQL_(AND,OR,NOT)与或非

诸如 NOT(!)、AND(&&) 等运算符在 java 中是如何工作的?

PHP中逻辑运算符and/or与||/&&的一个坑

Python 逻辑代码:AND、NAND、OR、NOR、XOR、XNOR 和 NOT 模拟