是C++标准规定的“函数的副作用在其计算之前排序”?

问题描述 投票:0回答:1

我在评估顺序中没有找到相关术语。

那么下面的代码中函数

g
的行为是否未定义?

int x;
int f() { return x++; }
void g() { x = f(); }

我在不同的平台上使用不同的参数编译了代码,结果表明

x
始终保持不变。

c++ language-lawyer evaluation
1个回答
0
投票

自 C++11 起,该代码已定义行为。在此之前它有未定义的行为。

自 C++17 起的规则是任何赋值的右侧都排序在左侧之前,并且两者都排序在赋值的副作用之前。

自 C++11 以来的规则是赋值的副作用排列在两个操作数之后。

f()中表达式g

值计算
副作用
来自于
f
主体的执行,即
x++

© www.soinside.com 2019 - 2024. All rights reserved.