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 例如bitand
和xor
。在 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
是短路版本还是按位版本。
【讨论】:
是的,在&
和&&
之间,比and
和bitand
之间更容易猜测哪个是位运算符。不幸的是,not_eq
是一个关系,而or_eq
是一个复合赋值运算符,具有讽刺意味的是它是按位的。【参考方案2】:
为什么没人?有些人使用它们。其他人认为符号比文字更具可读性。
【讨论】:
【参考方案3】:Visual C++ 不支持它们。
【讨论】:
Microsoft Visual C++ 需要包含人们只是不知道他们(我直到现在才知道)。
【讨论】:
以上是关于and, or, not 与 &&, ||, ! [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
ValueError 1:无法将列转换为布尔值:请使用 '&' 表示 'and'、'|' for 'or', '~' for 'not' 在构建 DataFrame 布尔表达式时