C++11 中的 =default 的含义

在 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;)。

猜你喜欢

转载自blog.csdn.net/qq_21746331/article/details/117608456