C++中的'and'、'or'等关键词的目的是什么?

5

What is the purpose of the following keywords?

and      bitand   compl   not_eq   or_eq   xor_eq
and_eq   bitor    not     or       xor

如果它们只是一个直接等效于的东西:
&&       &        ~       !=       |=      ^=
&=       |        !       ||       ^

2
并非所有的键盘都有 &~| 等按键。 - ildjarn
1
请查看iso646.h - James McNellis
3
@Matt:虽然我让一些同事感到惊讶,但通常我更喜欢使用“not”而不是“!”。“!”几乎看不见,“not”(需要在其后加一个空格)更加显眼。 - Matthieu M.
1
你的列表不完整。 "替代标记"列表(C++2003,§2.5)还包括<%%><::> %:%:%: - Robᵩ
我很想更多地使用它,因为在我看来它更清晰(而且看起来至少有点像Python ;)),但不幸的是,“编写常规、不出奇的代码”几乎排除了使用它们的可能性 :( - Voo
显示剩余2条评论
2个回答

13

http://en.wikipedia.org/wiki/Iso646.h

iso646.h文件定义了若干个宏,使得程序员可以使用C语言的位运算和逻辑运算符。如果没有这个头文件,在一些国际化和非QWERTY键盘上很难或无法输入这些运算符。

该文件名与ISO646标准有关,该标准是一种7位字符集,有许多地区变体,其中一些用重音字符代替C运算符使用的标点符号。


6
在C++中,这些不是宏,而是“替代标记”,您无需包含iso646.h文件。 - bames53
1
...但这是一个愚蠢的解决方案,因为即使使用这些替代标记,您仍然无法在不使用&、~和|字符的情况下编写C++程序。 - Rafael Baptista
1
如何在没有 ~ 的情况下定义析构函数?或者创建一个引用? - Rafael Baptista
4
class foo { compl foo() {} }; 这段代码并不容易理解...但它是可行的。 - bames53
唉,我被纠正了……在技术上它是可行的,但那是无法使用的破碎代码。那种代码将会是一个难以阅读的噩梦。 - Rafael Baptista
显示剩余3条评论

7

这是为了让你能写出像这样的疯狂代码诗:

class jack
{
   jack();
   jack( jack & jill );
   jack& came_tumbling( int after );
   jack& fell( jack & jill ); 
   jack& operator &= ( jack & jill );
   jack& operator & ( jack & jill );
}

void to_fetch( int pail );

int a_pail;
int after;
jack broke_his_crown;
jack went_up_the_hill;
jack down;

jack and jill = went_up_the_hill;
to_fetch( a_pail ); // of water
jack fell( down and broke_his_crown 
and jill.came_tumbling( after ));

我写的诗歌不太适合放在我们的代码库里 ;) - Captain Obvlious
我们都希望在C++12中添加一个Nantucket的标记。 - Rafael Baptista
1
这段代码片段唯一的问题是 and 相当于 &&,而不是 &... :P - Griwes
把这个社区变成维基社区,或许它会变成一首 C++ 民谣 :) - jrok

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