Wak*_*zil 1 c++ language-lawyer c++11
鉴于此片段
class Base
{
public:
Base(){};
};
class Derived : public Base
{
public:
Derived();
};
Derived::Derived() :Base() {}
Run Code Online (Sandbox Code Playgroud)
并考虑§12.6.2/ 2中的这一陈述(我的重点)
在mem-initializer-id中,在构造函数的类的范围内查找初始的非限定标识符,如果在该范围内找不到,则在包含构造函数定义的范围中查找它.
我想你说的名称查找Base在定义Derived构造函数是在发现的Derived类定义.
我只是想知道,如果还有其他更有形的例子,除了12.6.2/3中给出的例子,其中在构造函数的类中找不到mem-initializer-id.
该MEM-初始化-ID必须命名构造函数的类,构造函数的类的非静态数据成员,或者该类的直接或虚拟的基础.如果它是一个实际的类名(无论是派生类还是基类),它将在类的范围内被发现为注入类名.如果它是一个数据成员,名称查找显然会在类的范围内找到它.这样就留下了一个typedef,但这也是12.6.2/3中给出的例子:
class Base { };
class Derived : public Base
{
public:
Derived();
};
using BaseAlias = Base;
Derived::Derived() : BaseAlias() {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |