我的问题可能很简单,但我想知道这个 x+1 是什么意思? 让我们看一个例子:
int main()
{
int x = 2;
x + 1; //1
if ((x - 2) && (x = 7)) { //2 and 3
// do something
}
}
我所知道的:
- 无法评估赋值,因为 && 的左侧将返回 false,因此合取永远不会为真。
问题:
- 操作 1 后的内存是什么样子的?
- x 的值在 x-2 (2) 之后改变了吗?
我在调试器中看到这不会更改 x 的值,但我在 Visual Studio 中使用 C++ 编译器,因此它可以提供其他值。
提前致谢:)
最佳答案
代码
x+1;
计算表达式,然后丢弃结果。这是合法的,但一个好的编译器应该发出警告(IIRC g++ 发出一些关于需要副作用才能有用的表达式)。
代码 (x - 2) && (x = 7)
没有做任何事情,因为 &&
是“短路的”并且 x -2
在逻辑上下文中为假。所以代码 (x = 7)
没有被评估。 &&
和 ||
首先评估左侧,只有当无法从中确定结果时才评估右侧...例如 (1 || foo())
保证跳过对函数 foo
的调用。
代码如下
y = (x - 2) * (x = 7);
将改为未定义行为,因为 C++ 不需要按顺序处理子表达式(逗号运算符 ,
、逻辑 AND &&
、逻辑 OR||
和三元运算符 ?:
) 以及在表达式的不同部分使用和修改相同的值(如果这些部分没有规定的求值顺序)不是允许但编译器不需要提示它。无论发生什么都会发生,这是程序员的错。
关于c++ - C - x+1 没有赋值是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41942049/