看起来这些东西: http://www.cplusplus.com/reference/clibrary/ciso646/ 都是C++中的关键字。
我的问题是,这是C++标准的一部分吗?
我能否依赖主要编译器支持它们?我知道gcc确实支持这些关键字。
最后,也许这更多是个偏好或风格的问题,但使用这些关键字是否有什么优势,与使用标准运算符(!、!=、&&等)相比呢?
看起来这些东西: http://www.cplusplus.com/reference/clibrary/ciso646/ 都是C++中的关键字。
我的问题是,这是C++标准的一部分吗?
我能否依赖主要编译器支持它们?我知道gcc确实支持这些关键字。
最后,也许这更多是个偏好或风格的问题,但使用这些关键字是否有什么优势,与使用标准运算符(!、!=、&&等)相比呢?
/permissive-
(或者,虽然已过时和有缺陷,/Za
),以禁用 Microsoft 语言扩展。 对于几乎所有C ++项目启用此选项似乎是个好主意,只是很遗憾默认情况下它被关闭。and
、or
、not
等情况,许多人(尽管可能不是大多数人)认为它更易读。个人建议使用它们。/permissive-
标志的情况下编译MSVC代码,那么请添加#include <ciso646>
(这是一个标准头文件,在符合C ++实现的情况下为空,但会为MSVC添加运算符宏)。&&
,||
和!
时会感到困惑。我认为对于编程人员来说这种写法反而不易读,而编程人员正是你在考虑编写“易读”代码时应该针对的对象。 - user229044not x
比! x
更易读,因为它使运算符更加明显,不太可能被忽略。而且,我认为a and b
很清楚地表明我们正在处理逻辑条件,而不是数字。 - Konrad Rudolphreturn !someThing.isValid();
与return not someThing.isValid();
的区别。 - Ichthyo这是C++标准的一部分吗?
是的。请参见[lex.digraph]部分的表格。
使用关键字是否有任何优势?
我的理解是原始的双字符替换(<%
代替{
等)是为了让使用简单键盘的人能够编写C代码(维基百科支持此说法)。也许相同的理由适用于not_eq
等。但据我所知,现在没有什么好理由去编写这样的代码(除非你在手机上编程),尤其是因为99%的程序员不知道它是有效的C++代码!
是的,它们得到支持。
就你问题的后半部分而言,它们可以导致更易读的代码,特别是在处理位运算符以及同时处理逻辑操作时,例如:
if( a & 1 == 0 || c | a == 2 );
vs
if( a & 1 == 0 or c | a == 2 );
bit_and
并不比&
更易读,就像a plus b
不如a + b
易读一样。但我同意它可以使逻辑表达式更易读。 - Konrad Rudolphand
和 &&
不是同一回事。然而,我仍然认为,在代码行中,运算符作为标点符号突出显示,变量作为单词突出显示会更容易阅读,如果一行代码混合使用普遍存在的 &&
风格运算符和不太常用的 and
风格运算符,我会感到非常分心。 - user229044||
、&&
、!=
等)更难读懂,因此除非你只想对不支持它们的编译器厂商做出政治声明,否则最好避免使用它们。void foo(T bitand param);
从这里可以明显看出如何通过右值引用传递一个值:
void foo(T and param);
虽然看起来有点傻丑,但至少解决了关于 T& param
和 T ¶m
的争议——使用 bitand
时需要在两侧都留出空格。但是,这样做会让人误解、困惑和难以阅读。
哦,还要小心不要将其拼写为 bit_and
而不是 bitand
。还有一个名为 bit_and
的东西,但它完全不同——bitand
是一个预处理器标记,而 bit_and
是在 <functional>
中定义的函数模板。使用错误的标记可能会导致一些令人困惑的编译器错误。
尽管如此,我可以想到一种情况,其中 and
、bitand
等可能是合理的。如果(出于某种原因)您无法键入代码,并且必须使用语音识别软件,则使用基于单词的标记可能会更容易,例如输入 and
要比输入 &&
更容易。虽然辨别 bitand
和 bit_and
可能更加困难,但后者很少使用,所以可能不是什么大问题。
总结
对于一些人来说,使用接受的符号输入代码确实很困难,因此使用基于单词的标记是合理的。
对于其他任何人,即使他们个人认为 and
比 &&
更易读,在别人面前使用这样的代码也像我在五岁时决定将加法函数命名为 biggerate
一样可笑。因此,如果您喜欢它们,并且您编写的代码绝对、肯定不会被其他人阅读,请放心使用。否则,使用它们是一个不好的想法。
and
、or
和 not
更易读 — 特别是 not
。 - Konrad Rudolph
not
,因为它比!
更不容易被忽视。 - Daniel Fischereq/is_eq
(我很乐意放弃我避免的位运算形式):| - user2864740