C ++标准语法的成员声明

时间:2014-05-23 16:22:39

标签: c++ grammar c++03

在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个。但是第3个定义了一个强制性的嵌套名称说明符,后跟一个id。例如

class {
  X::Y::z;
}

我不知道任何符合此定义的C ++语法。我错过了什么吗?

1 个答案:

答案 0 :(得分:4)

答案可以在[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取代,但出于兼容性目的而保留。