def*_*alt 86 c++ language-features logical-operators
这是我见过的唯一一个地方and,or并被not列为C++中的实际运算符.当我在NetBeans中编写一个测试程序时,我得到了红色下划线,好像有一个语法错误,并认为该网站是错误的,但它是错误的NetBeans,因为它编译并按预期运行.
我可以看到!受到青睐,not但and&& 的可读性or似乎比他们的语法兄弟更大.为什么这些版本的逻辑运算符存在,为什么看似没有人使用它?这是真正有效的C++还是与语言中包含的C的某种兼容性?
GMa*_*ckG 100
它们起源于下在头<iso646.h>.当时存在无法键入&&(例如)所需符号的键盘,因此包含的标题#define将帮助他们这样做,通过(在我们的示例中)定义and为&&.当然,随着时间的推移,这变得越来越少.
在C++中,它们成为了所谓的替代令牌.你不会需要包括任何一个兼容的编译器使用这些标记(如如此,C++ - C头的指明分数版本<ciso646>,为空).除了拼写之外,替代令牌就像常规令牌一样.因此,在分析过程中and是完全相同一样&&,它的拼写同样的事情只是用不同的方式.
至于它们的用途:因为它们很少使用,使用它们往往比它有用更令人惊讶和混乱.我敢肯定,如果它是正常的,它们会更容易阅读,但人们已经习惯了&&,||其他任何东西都会让人分心.
编辑:然而,自从我发布此内容后,我看到他们的使用量略有增加.我仍然避开它们.
mr3*_*mr3 17
它们确实存在可用性(键盘/显示器口味中的字符支持)和一般可读性,但还有另一个原因,现在更加明显.这里,这里的答案几乎都没有,甚至这里的主要答案都没有说明我们许多人更喜欢单词版本而非符号版本的核心原因(以及其他语言使用它们的主要原因):错误.单词版本之间的差异非常明显.符号版本之间的差异明显不那么大,以至于在相对更大程度上诱惑错误:"x | y"非常不是"x || y",但是当嵌入更大的表达式时我们很多人想念差异.它类似于赋值与等于运算符的常见意外混合.出于这个原因,我已经脱离了符号版本(这并不容易),而是支持单词版本.由于我们喜欢旧事物而不是诱惑虫,我宁愿让别人对它们进行双重拍摄.
Chr*_*ung 10
在C++中,它们是真正的关键字.在C中,它们是定义的宏<iso646.h>.请参阅http://web.archive.org/web/20120123073126/http://www.dinkumware.com/manuals/?manual=compleat&page=iso646.html.
and&&在 C++ 中功能相同。和运算符是真正有效的 C++ and,or并且是语言标准的一部分。
为了用具体的例子来详细说明其他答案,除了“可读性”之外,还有另一个原因and比&&. 当逻辑 AND 符合您的意思时,明确拼写出“and”可以消除出现细微错误的可能性。
考虑一下:
int x = 3;
int y = 4;
// Explicitly use "and"
if (x and y) {
cout << "and: x and y are both non-zero values" << endl;
}
// Using "&&"
if (x && y) {
cout << "&&: x and y are both non-zero values" << endl;
}
// Oops! I meant to type "&&"!
if (x & y) {
cout << "&: x and y are both non-zero values" << endl;
}
else {
cout << "How did I get here?" << endl;
}
Run Code Online (Sandbox Code Playgroud)
所有三个 if 语句都会编译,但最后一个语句的含义完全不同并且是意想不到的!
如果您总是在表示逻辑 AND 时使用and,则永远不会意外地键入单个“&”,并使代码成功编译并运行并产生神秘的结果。
另一个很好的练习:尝试不小心漏掉“and”字符,看看会发生什么。;)
| 归档时间: |
|
| 查看次数: |
10301 次 |
| 最近记录: |