C++中的四个能够保证求值顺序的运算符
- &&
- ||
- ?:
- ,
对于没有指定求值顺序的运算符,在一个表达式里既改变又使用一个对象是一个错误。
- int i = 0;
cout << i << ” ” << ++i << endl; // undefined
- int i = 0;
A rule of thumb
- 如果你改变了一个操作数的值,不要在这个表达式的任何其他地方使用这个操作数
下面的代码片段是错误的
- int a[3] = {1, 2, 1};
i = 0;
if (a[i++] == a[i+1])
… - 不同的编译器的结果是不同的
- int a[3] = {1, 2, 1};
那下面的代码呢?
- int a[3] = {1, 2, 1};
i = 0;
if (a[i] == a[i+++1])
… - 目前在两个编译器上的结果都等同于a[i] == a[i+1]
- int a[3] = {1, 2, 1};
总之,要避免模糊的写法!
Order of Evaluation
最新推荐文章于 2024-08-15 05:02:54 发布