在 C++ 中,当用户定义一个类的时候,如果没有给类定义任何构造函数,那么编译器会生成一个默认构造函数,使得在定义该类的对象的时候,调用了自动生成的默认构造函数为成员变量执行默认初始化。如果用户在定义一个类的时候,只要定义了任何一个构造函数,编译器则不会再为该类生成默认的构造函数,如果我们还需要一个默认构造函数,则只能自己定义。而在 C++11 新标准中,可以通过 =default 关键来声明构造函数,告诉编译器为该类生成一个默认的版本,由编译器自己生成的默认构造函数,性能上一般会比用户自己定义的更好,而且也更有标志性,便于代码的阅读。如下例:
#include <string>
class Person
{
public:
Person() = default;
Person(std::string n, std::string addr) : name(n), address(addr) {
}
private:
std::string name;
std::string address;
};
int main()
{
Person p1; //如果不包括 Person() = default 这行代码将报错,因为没有默认构造函数
Person p2("Bob", "Roma Street");
return 0;
}
注意,即使用 =default 告诉编译器生成默认构造函数,编译器也只有在检测到确实是需要默认构造函数的时候才会生成,比如说上例的 (
Person p1;
)。