在C++规范的语法中,一个类的成员是这样定义的:
member-declaration:
decl-specifier-seq(optional) member-declarator-list(optional);
function-definition ;(optional)
::(optional) nested-name-specifier template(optional) unqualified-id ;//what is this?
using-declaration
template-declaration
...
我理解其中的 4 个。但是第三个定义了一个强制性的嵌套名称说明符,后跟一个 id。例如
class {
X::Y::z;
}
我不知道有任何符合此定义的 C++ 语法。我错过了什么吗?
最佳答案
答案可以在 [class.access.dcl] 部分找到。简而言之,这样的声明称为“访问声明”,其目的是更改继承成员的访问级别。
例如:
class A
{
protected:
int a;
int a1;
};
class B
{
public:
int b;
int b1;
};
class C : public A, private B
{
public:
A::a;
B::b;
}
int f()
{
C c;
c.a1; // access error: A::a1 is protected
c.b1; // access error: B is private base of A
c.a; // accessible because A::a is 'published' by C
c.b; // accessible because B::b is 'published' by C
}
这种声明已被 using
取代,但出于兼容性目的而保留。
关于c++ - C++标准语法的成员声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23834139/