gpt4 book ai didi

c++ - C - x+1 没有赋值是什么意思?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:01:18 25 4
gpt4 key购买 nike

我的问题可能很简单,但我想知道这个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com