Man*_*ork 3 c++ scope operators member c++11
请考虑以下示例:
class A { int x; };
Run Code Online (Sandbox Code Playgroud)
现在是什么A::x?
decltype(A::x).T.C*_*.C. 11
事实上,这是一个左值.[expr.prim.id.qual]/2:
一个嵌套名称说明符,表示一个类[...]后跟该类([class.mem])或其基类之一的成员名称,是一个限定ID [...] .结果是成员.结果的类型是成员的类型.如果成员是静态成员函数或数据成员,则结果是左值,否则为prvalue.
虽然它在类成员访问表达式之外的用法受到[expr.prim.id]/2的严格限制,但它可以特别用于未评估的操作数,其左值可以显示:
struct A {
int x;
};
void f(int &);
using p = decltype(&(A::x)); // p is int*; the parens prevents forming a pointer-to-member
using q = decltype(f(A::x)); // q is void
Run Code Online (Sandbox Code Playgroud)
A::x仅仅是一种不太模糊的引用成员的方式,x如果本地上下文影响该成员,则可能是必要的:
儿童班也有会员x.
struct B : public A
{
int x;
void foo()
{
int local_x = x;
int parent_x = A::x;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你x protected在课堂上做的话会编译A(目前是private).
你甚至可以在一个成员使用该函数的A有x作为参数:
class A {
int x;
void foo(int x)
{
int parameter_x = x;
int member_x = A::x;
}
};
Run Code Online (Sandbox Code Playgroud)