后缀表达式后跟一个点.
或箭头->
,可选地后跟关键字template
(17.2),然后是id-expression,是后缀表达式。计算点或箭头之前的后缀表达式;67该评估的结果与id-expression一起确定整个后缀表达式的结果。
67) 如果类成员访问表达式被求值,子表达式求值发生,即使结果对于确定整个后缀表达式的值是不必要的,例如如果id-expression表示静态成员。
后缀表达式后跟一个点.
或箭头->
,可选地后跟关键字template
(17.2),然后是id-expression,是后缀表达式。计算点或箭头之前的后缀表达式;67该评估的结果与id-expression一起确定整个后缀表达式的结果。
67) 如果类成员访问表达式被求值,子表达式求值发生,即使结果对于确定整个后缀表达式的值是不必要的,例如如果id-expression表示静态成员。
如果一个成员被定义为static
,那么该类只有一个该成员的副本,而不是该类的每个实例都有一个副本。静态成员可以通过类的实例(对象)来引用。脚注阐明了标识实例的表达式已被评估(并且会发生任何副作用),即使您不需要知道您正在访问哪个实例对象即可知道静态成员的值。
一个例子:
#include <iostream>
class foo {
public:
static int s;
};
int foo::s = 42;
int index() {
std::cout << "index returns 5\n";
return 5;
}
int main() {
foo arr[10];
std::cout << arr[index()].s << "\n";
}
只有一个s
对象,它的值为42
,但表达式arr[index()]
仍然被计算,即使它的结果不需要确定 的值s
。
输出是:
index returns 5
42