m.size()
在 m[0]
之前被顺序执行;结果保证是 0
。
- 在每个简单赋值表达式 E1=E2 和每个复合赋值表达式 E1@=E2 中,E2 的每个值计算和副作用都在 E1 的每个值计算和副作用之前被顺序执行
在 C++17 之前,行为是 未指定 的。
顺便说一下,您可以在 Gcc C++17 模式 和 Gcc C++14 模式 下观察到不同的行为。
m[0]
和m.size()
都是函数调用。它们的执行体不能重叠,即使它们的调用点是未排序的。 - j6t当左操作数具有引用类型时,赋值运算符会修改所指对象。
如果左右操作数标识重叠的对象,则行为是未定义的(除非重叠是精确的且类型相同)。
m[0]
和m.size()
的顺序没有定义。 - Marek R