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

标签 c++ c

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

相关文章:

c++ - 内部有结构的枚举或数组

c++ - 如果一个类要基于指针,那么内部对象是否必须基于指针?

c++ - 包含另一个对象的指针 vector 的对象

c - C 到 D 之间的 typedef 转换有问题

c - [NSDictionary getObjects :andKeys:] 示例

c - c 中的 scanf 命令出现问题(在论坛中找不到其他地方)

c++ - 过剩 - 按住一个键

c++ - NULL 与抛出和性能

c - 动态规划 - 最小硬币缓存

c - 删除c中的子字符串