在C++中,访问静态成员的值的表达式是在静态成员访问之前排序的吗?

问题描述 投票:0回答:1

假设我有:

struct Foo {
    static void bar();
};

Foo foo() { return Foo(); }

在表达式

foo().bar()
中,对
foo
的调用是否保证发生在对 bar()
 的调用之前?标准中哪里有这样的规定?

疑问是因为没有使用调用结果的

value,并且类型在编译时就已知...

c++ standards expression-evaluation
1个回答
0
投票
严格来说,不是。

[expr.ref] p1 仅指出:

计算点或箭头之前的后缀表达式;该评估的结果与

id-expression 一起确定整个后缀表达式的结果。

这意味着对于

E1.E2

E1
 发生在 
E1.E2
 之前,但 
E1
E2
 没有顺序。

话虽这么说,

E2

是一个
id-表达式,它要么是qualified-id,要么是unqualified-id,这样的表达式本身不执行任何值计算,也没有副作用。因此,E2
是否排在
E1
之前并不重要。

© www.soinside.com 2019 - 2024. All rights reserved.