scope01.c

来自「this is a gcc file, you can download it 」· C语言 代码 · 共 72 行

C
72
字号
// Build don't link:// 980604 bkoz// 3.4.5 Class member access p 4// nested and non-nested calls, no dtorsstruct L {   int ii;   void foo(int a) {++a;}  struct Linner {    int ii_inner;     void foo_inner(int b) {++b;}  };};class A : public L {};class B : public L {};class C : public A, public B {};void foo() {  // straight call  C x;  x.A::ii = 5;  x.A::foo(x.A::ii);    // 5.1 Primary expressions  // p 8   // a nested name specifier that names a class,  // optionally followed by the keyword template and then followd by  // the name of a member of either that class or one of its base  // classes is a qualified-id.  (3.4.3.1 describes their lookup.)   // 5.2.5 Class memember access   // p 3 if E1 has the type 'pointer to class X' then   // E1->E2 == (*(E1)).E32  // E1 == object-expression  // E2 == id-expression  // thus everything gets converted to the "." notation  // p 2  // the id-expression shall name a member of the class  // (object-expression) or of one of its base classes.  // p4 if E2 is a nested type (of the object-expression), tye  // expression E1.E2 is ill formed.  // try 1 nested call - ERROR#if 0  C x2;  x2.A::L::Linner::ii_inner = 6; //ERROR violates p2, does not name member of C  x2.A::L::Linner::foo_inner(x2.A::L::Linner::ii_inner);#endif  //try2: scoped method call  -edg +acc +g++#if 1  C::A::Linner x2;  x2.A::Linner::ii_inner = 6;  x2.A::Linner::foo_inner(x2.A::Linner::ii_inner);#endif  //try 3: non-scoped method call  -edg +acc +g++#if 0  C::A::L::Linner x3;  x3.ii_inner = 6;  x3.foo_inner(x3.ii_inner);#endif}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?