and, or, not与&&、||、!的区别

14

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

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

在C语言中,bitandxor等操作符过去是宏,但现在它们已经成为关键字了!你甚至可以重载它们!那么,为什么还会有人教或编写这样的内容:

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

为什么没有人使用它们?

在C语言中,他们曾经被用作宏。不,它们从来没有被视为C语言中的宏,尽管一些个别的C程序可能定义了这样的宏。并且这不是一个真正的问题,它具有观点性和争议性--请参阅FAQ。 - Jim Balter
1
@Jim Balter:但在C语言中,它们确实是宏,在iso646.h中定义。 - Sebastian Mach
@phresnel 我承认我错了。但是,他们曾经是C中的宏,现在是关键字的说法是错误的...它们在C中仍然是宏。 - Jim Balter
@Jim Balter:没错,我的评论是针对你和原帖作者的。不幸的是,我们无法同时@多个用户。 - Sebastian Mach
显示剩余2条评论
4个回答

7

由于不允许混合使用C/C++代码而不包含额外的头文件,这使得它们不太为程序员所知,并且不清楚and是短路版本还是位运算版本。


3
&&&之间,很容易猜到哪一个是按位运算符,而在andbitand之间就不那么容易了。不幸的是,not_eq是一个关系运算符,而or_eq则是一个复合赋值运算符,具有讽刺意味的是它居然是按位运算符。 - Marc van Leeuwen

2
为什么没有人使用图标?有些人使用它们,而另一些人则认为符号比文字更易读。

2

Visual C++不支持它们。


微软的 Visual C++ 要求包含<ciso646>才能使用这些标识符,这样做会给本应属于基础语言的东西增加一个无用的依赖关系。(或者根本不该有,但也不应该落在中间位置) - Tic

1

人们只是不知道它们(直到现在我也不知道)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接