#include <iostream>
#include <conio.h>
using namespace std;
class Base
{
int a;
public:
Base(const Base & b)
{
cout<<"inside constructor"<<endl;
}
};
int main()
{
Base b1;
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误.没有匹配函数来调用`Base :: Base()'为什么?
仅当您未声明任何构造函数时,才会生成默认构造函数.假设你定义了自己的构造函数,那么你也可以决定是否需要一个无参数的构造函数,如果是这样的话,也可以定义它.
在C++ 0x中,会有一个明确的语法来表示你想要默认的构造函数:
struct Foo {
Foo() = default;
... other constructors ...
};
Run Code Online (Sandbox Code Playgroud)
它不会隐藏默认构造函数,但声明类中的任何构造函数会禁止编译器生成默认构造函数,其中any包含复制构造函数.
如果存在任何其他构造函数,则禁止生成默认构造函数的基本原理基于以下假设:如果在一种情况下需要特殊初始化,则隐式生成的默认构造函数很可能是不合适的.