有人能引用C++标准中相应的段落吗?该段落说明以下情况下
std::string
构造和foo()
调用的顺序是未指定的。std::string().append(foo());
我知道有5.2.2.8,但它只涉及函数参数的问题,而不是同一序列点中多个函数调用的顺序:
函数参数的评估顺序未指明
std::string
构造和foo()
调用的顺序是未指定的。std::string().append(foo());
我知道有5.2.2.8,但它只涉及函数参数的问题,而不是同一序列点中多个函数调用的顺序:
函数参数的评估顺序未指明
曾经广泛认为,将表达式求值的顺序保持未定义会导致更多的优化。这在10年和20年前可能是正确的,但现在似乎不再如此。有关这方面的数据已呈现给委员会,但我不知道是否已经发表。
5/4 [expr]:
除非另有说明,否则单个运算符的操作数和单个表达式的子表达式的计算顺序以及副作用发生的顺序是未指定的。
因为运算符是函数,这意味着string()
将在foo()
之前或之后构造。
另请参见:函数调用的顺序
“Bjarne Stroustrup在《C++程序设计语言》第3版6.2.2节中也明确表示了这一点,并给出了一些理由:
在没有表达式计算顺序限制的情况下,可以生成更好的代码。
另请参见:C++函数参数的计算顺序
operator.
? - FrozenHeartoperator.
也被归类为函数,但是)不,不像operator+
那样。抱歉没有说明清楚... - Jossie Calderon
this
参数的来源,但我不确定我的理解是否正确,因为我没有彻底阅读标准的这部分内容。 - jaggedSpire