struct Base{
Base(Base &){} // suppress default constructor
};
struct Derived : Base{
};
int main(){
Derived d;
}
显示的代码给出错误,因为'Base'的默认构造函数(隐式)被抑制。事实上,标准说,在$ 12.1 "If there is no user-declared constructor for class X, a default constructor is implicitly declared."
默认构造函数
有三件事情:
一)是否标准说任何地方 如果用户声明的构造是 存在于类,默认 构造函数(隐含的)被压制。它基本上是否定的上述措词,或者是否再次暗示:)?
b)为什么这样?
c)为什么相同的规则不适用于默认的析构函数?
这里有一些困惑。 “默认构造函数”技术上指的是没有参数的构造函数,并且没有对应的析构函数。编译器抱怨,因为你不能声明一个没有默认(无参数)构造函数的未初始化变量。有时候“默认构造函数”用于系统提供的,这在英文用法上是合理的,但完全不同。如果你没有自己定义的话,标准指的是“隐式声明的”构造函数。 – 2010-09-13 14:33:01
为什么在你的例子中你显示继承?它与你的问题有什么联系? – 2010-09-13 15:04:22