【发布时间】:2018-03-06 14:06:58
【问题描述】:
关于这个问题
What are the evaluation order guarantees introduced by C++17?
有了这个规范
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0145r3.pdf
以及规范中的这段文字
此外,我们建议以下附加规则: 涉及重载运算符的表达式的评估是 由与相应内置相关联的顺序确定 运算符,而不是函数调用的规则。
这是否意味着这两个表达式不再等价?
a << b;
operator<<(a, b);
由于第二个看起来像函数调用,因此参数中没有保证的评估顺序?
【问题讨论】:
-
没错,两种不同的语法现在有不同的语义。运算符语法有其特殊的语义,函数调用语法有(新的!)函数调用语义。
-
@KerrekSB 这正是这个提议的原因:open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0431r0.htm 是写出来的,但我不相信它有任何吸引力。
-
@ForeverLearning:这当然是一个能激发心灵、思想和建议的主题!
标签: c++ language-lawyer standards c++17