Fro*_*art 4 c++ operator-precedence language-lawyer
有人可以引用C++标准的相应段落,该段落表示在以下情况中未指定std::string构造和foo()调用的顺序:
std::string().append(foo());
Run Code Online (Sandbox Code Playgroud)
我知道有5.2.2.8,但它说明了函数参数,而不是相同序列点之间的几个函数调用:
函数参数的评估顺序未指定
5/4 [表达式]:
除非另有说明,否则未指定各个运算符的操作数和各个表达式的子表达式的求值顺序以及副作用发生的顺序
因为运算符是函数,所以这意味着string()将在 before 或 after 构造foo()。
另请参阅:函数调用顺序
“Bjarne Stroustrup 在《C++ 编程语言》第 3 版第 6.2.2 节中也明确指出了这一点,并给出了一些推理:
在不限制表达式求值顺序的情况下可以生成更好的代码。
另请参阅:C++ 函数参数中的求值顺序