假设我有:
struct Foo {
static void bar();
};
Foo foo() { return Foo(); }
在表达式
foo().bar()
中,对 foo
的调用是否保证发生在对 bar()
的调用之前?标准中哪里有这样的规定?疑问是因为没有使用调用结果的
value,并且类型在编译时就已知...
[expr.ref] p1 仅指出:
计算点或箭头之前的后缀表达式;该评估的结果与这意味着对于id-expression 一起确定整个后缀表达式的结果。
E1.E2
,
E1
发生在
E1.E2
之前,但
E1
和
E2
没有顺序。话虽这么说,
E2
是一个id-表达式,它要么是qualified-id,要么是unqualified-id,这样的表达式本身不执行任何值计算,也没有副作用。因此,
E2
是否排在
E1
之前并不重要。