为什么存在这些替代运算符表示

gda*_*004 8 c++

考虑这些替代运算符表示:(取自此处)

Primary Alternative
&&      and
&=      and_eq
&       bitand
|       bitor
~       compl
!       not
!=      not_eq
||      or
|=      or_eq
^       xor
^=      xor_eq
Run Code Online (Sandbox Code Playgroud)

为什么存在这些替代运算符表示?我喜欢他们,但我想找到理由让我的经理允许我使用它们.

Jam*_*nze 12

正如tomislav-maric在评论中指出的那样,原因正是您引用的页面上给出的:一些较旧的广泛编码不包含被替换的字符.这可能在今天不太相关,因为这些编码几乎已经消失,被一些ISO 8859编码或UTF-8取代.我认为您不能将此作为经理的论据.

在另一方面,至少有一些C++专家喜欢and,ornot&&,||!.我不是其中之一,但无论如何都有争论.我的感觉很简单,它是C/C++,并且有许多奇怪的字符序列统治.(如果我是从头开始设计一种语言,但是...)

关于页面上的三字母:这可以被认为是一个没有真正起作用的实验.据我所知,没有人真正使用它们; 生成的代码就像使用替换字符一样难以理解.如果您使用的是德语ISO 646,请考虑其他选择:

int arrayÄ 10 Ü;      //  native
int array??( 10 ??);  //  tri-graphs
int array<: 10 :>;    //  digraph
Run Code Online (Sandbox Code Playgroud)

只有最后一个甚至可以略微阅读,但到指定最后一次时,问题几乎消失了.

编辑:

还有一点.无论个人喜好如何,您都应该在团队层面做出决定and/ or/ not&&/ ||/ !,并且团队中的每个人都应该使用相同的约定.

编辑:

FWIW:三元曲线最初是在C90中引入的(K&R C没有它们); C++ 98和C99中的有向图和备用标记.(我不确定AFront的早期版本是否支持它们.)


Yu *_*Hao 6

C委员会解释了为什么C iso646.hC99 Rationale中引入了这些替代运算符,我认为它也可以用于C++,因为C++从C继承它们.

简而言之,在C中引入了有向图和三字符来解决在旧的EBCDIC机器中使用C的问题(仅部分支持ASCII,因此一些缺少的ASCII令牌需要用EBCDIC字符表示).虽然替代运算符用于将二层图和三字图的使用保持在最低限度.

国际标准的基本原理 - 编程语言 - C§MSE.4 支持不变的ISO/IEC 646

有意添加的有向图被保持在最低限度.委员会尽可能以新标题中定义的宏的形式为运营商提供备用拼写<iso646.h>.为预处理运算符提供了替代拼写#,##因为它们不能被宏名称替换.还提供了用于在有向图标点符号[,],{,和}因为宏名称被证明是一个更小可读替代.委员会认识到,此标题中提供的解决方案是不完整的,涉及多种方法,但仍然相信它可以帮助使标准C程序更具可读性.

例如,字符|不在旧机器中,因此三字符??!用于表示它,但这会使代码难以阅读||使用很多.C通过让替代运算符or代表使用来解决问题||.