msc*_*msc 12 c++ logical-operators
我看到了其他运营商(如and,or,not等)浏览cppreference时.
他们是替代"正常"运营商如&&,||,!等.
我检查了程序集中使用&&和的代码and.两个版本都生成相同的程序集.
代码:
#include <iostream>
int n = 1;
int main()
{
// if(n > 0 && n < 5)
if(n > 0 and n < 5)
{
std::cout << "n is small and positive\n";
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
&&和and运营商有什么区别?and过&&?and,or,not等等)?Sto*_*ica 15
&&和运算符之间有什么区别?
没有1.这些运算符的"替代"方面意味着它们可用于从语义角度构造完全相同的表达式.
我在何时何地使用和结束&&?
这在很大程度上是一个偏好问题.我太习惯&&不使用它了,但是如果有人发现and更具可读性,我就能理解.
为什么C++会引入替代运算符?
C++旨在提供各种字符集和平台.像Bathsheba指出的Trigraphs是这种特征的另一个例子.如果一个字符集不允许&&被写入(例如,因为它根本没有&字符),那么人们仍然可以使用替代表示.如今,这在很大程度上没有实际意义.
1实际上,经过进一步思考,我对你的第一个问题的答案可以得到改进.稍微缺乏等效性,与如何解析令牌有关.&&不需要将空格解析为单独的标记,同时and也是如此.这意味着:
void foo(bool b1, bool b2) {
if(b1&&b2) { // Well formed
}
if(b1andb2) { // ill formed, needs spaces around `and`
}
}
Run Code Online (Sandbox Code Playgroud)
Bat*_*eba 10
and,or,not,& C.是替代运营商的例子.
有关完整列表,请参阅http://en.cppreference.com/w/cpp/language/operator_alternative ; 开头段落是存在的理由:
C++(和C)源代码可以用包含ISO 646:1983不变字符集的任何非ASCII 7位字符集编写.但是,一些C++运算符和标点符号需要在ISO 646代码集之外的字符:{,},[,],#,\,^,|,〜.为了能够使用其中部分或全部符号不存在的字符编码(例如德国DIN 66003),C++定义了由ISO 646兼容字符组成的以下备选方案.
如果我是你,我会回避使用它们,就像你应该回避使用有向图和三角形一样,即使后者使面试变得有趣.
例如,Trigraphs明确地从C++ 17中停止.你可能会看到and&c.也被放弃在未来的标准中.
| 归档时间: |
|
| 查看次数: |
4711 次 |
| 最近记录: |