Lig*_*ica 11 c++ language-lawyer c++14
不完整的类型无法实例化,抽象类(即具有纯虚拟成员函数的类)也无法实例化.
struct incomplete_type;
struct abstract_class
{
virtual void foo() = 0;
};
Run Code Online (Sandbox Code Playgroud)
抽象类本身被认为是不完整的类型吗?
Lig*_*ica 15
表面上它们是相似的(除了抽象类确实有定义而不完整类型没有定义的事实):
[n3690: 3.9/5]:[..] 对象不应被定义为具有不完整类型.
[n3690: 10.4/2]:抽象类是一个只能用作其他类的基类的类; 除了作为派生自它的类的子对象之外,不能创建抽象类的任何对象. [..]
[n3690: 10.4/3]:抽象类不能用作参数类型,函数返回类型或显式转换的类型.可以声明指针和对抽象类的引用.
但是,该标准实际上表明这两个概念是无关的:
[n3690: 3.9/5]:已声明但未定义的类,某些上下文(7.2)中的枚举类型,或未知大小或不完整元素类型的数组,是未完全定义的对象类型.未完全定义的对象类型和void类型是不完整的类型(3.9.1).不应将对象定义为具有不完整类型.
您的抽象类有一个定义,因此不能被认为是不完整的类型.
N3690是C++ 14委员会草案.
| 归档时间: |
|
| 查看次数: |
898 次 |
| 最近记录: |