我的问题可能很简单,但我想知道这个x + 1是什么意思?我们来看一个例子:
int main()
{
int x = 2;
x + 1; //1
if ((x - 2) && (x = 7)) { //2 and 3
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
我知道的:
问题:
我在调试器中看到这不会改变x的值,但我在Visual Studio中使用C++编译器,因此它可以提供另一个值.
提前致谢 :)
代码
x+1;
Run Code Online (Sandbox Code Playgroud)
计算表达式,然后删除结果。这是合法的,但一个好的编译器应该发出警告(IIRC g++ 发出一些关于需要副作用才能有用的表达式的信息)。
相反,该代码(x - 2) && (x = 7)不执行任何操作,因为&&它是“短路的”并且x-2在逻辑上下文中为 false。所以代码(x = 7)没有被评估。&&并||首先评估左侧,只有当无法从中确定结果时才评估右侧...例如,(1 || foo())保证跳过对 function 的调用foo。
代码如下
y = (x - 2) * (x = 7);
Run Code Online (Sandbox Code Playgroud)
相反,这将是未定义的行为,因为 C++ 不需要按顺序处理子表达式(逗号运算符,、逻辑 AND &&、逻辑 OR||和三元运算符除外?:),也不需要在表达式的不同部分使用和修改相同的值(如果这些部分没有规定的求值顺序)是不允许的,但编译器不需要对此进行抱怨。无论发生什么事情都会发生,这都是程序员的错。
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |