【发布时间】:2018-03-16 06:28:21
【问题描述】:
我想知道以下两个代码的确切区别。我很清楚,如果我正在创建 Derived 类的对象,那么这两个程序都会抛出错误。这是因为基类的构造函数是私有的。
我正在使用以下版本的 gcc gcc 版本 4.8.3 20140627 [gcc-4_8-branch 修订版 212064] (SUSE Linux)
请告诉我为什么第一个程序在编译时没有显示任何错误。但第二个显示编译错误。
No error
****************************************
class Base
{
private:
Base()
{
cout << "Base constructor" << endl;
}
};
class Derived:public Base
{
};
int main()
{
return 0;
}
Throwing Error at compilation time
*****************************************
class Base
{
private:
Base()
{
cout << "Base constructor" << endl;
}
};
class Derived:public Base
{
public:
Derived()
{
}
};
int main()
{
return 0;
}
【问题讨论】:
-
编译器生成的构造函数和用户定义的构造函数(甚至是空的)之间的一个区别是编译器生成的构造函数是trivial,而用户定义的构造函数从来不是。
标签: c++