到底是什么在[expr.ref]/1中提到的脚注的含义是什么?
问题描述:
[expr.ref]/1:到底是什么在[expr.ref]/1中提到的脚注的含义是什么?
后缀表达式后面跟着一个点.
或箭头->
,任选接着进行关键字template
(17.2), 然后接着是ID-表达,是一个后缀表达式。评估点或箭头 之前的后缀表达式; 该评价的结果,与ID-表达一起,确定了整个 后缀表达式的结果。
67)如果类成员访问表达式,子表达式评估发生即使结果不需要 确定整个后缀表达式的值,例如如果ID-表达表示静态成员。
答
如果一个成员被定义为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
感谢。不能说得更清楚。 – Alexander