C ++ 11:默认构造函数:隐式还是显式?

时间:2016-07-29 20:11:55

标签: c++11 constructor default

我什么时候应该在C ++ 11中使用default关键字?

现在认为写

是不好的
struct Foo {

};

一个人应该写

struct Foo {

  Foo() = default;


};

4 个答案:

答案 0 :(得分:2)

考虑编译器提供default constructor not 的情况。然后你可以使用= default告诉编译器为你创建一个默认的构造函数。

否则(除非你需要一个特殊的默认构造函数),没有理由以任何方式指定默认构造函数(有或没有= default)。

在您的示例中,不需要"显式" = default构造函数。这更像是一种风格问题。

答案 1 :(得分:2)

如前所述here,当您使用参数创建构造函数时,不会生成默认构造函数。在这些情况下,使用default关键字会为该类生成default constructor

但是,请仔细考虑您正在处理的对象是否应该具有默认构造函数;也就是说,如果其他对象的默认初始化是正确的事情。请注意,默认情况下POD成员不会被初始化,并且可能包含没有data member initalisers的垃圾数据。

答案 2 :(得分:2)

这似乎是一个基于意见的问题。但是,似乎第一个选项最常用,因为第二个选项更冗长,程序员不会使用默认值,除非默认操作必须delete

答案 3 :(得分:0)

如果提供显式的非默认构造函数,则不会获得编译器提供的默认值。在这种情况下,您可以使用default关键字强制编译器提供它。

另一种情况是,如果您想确保您的默认构造函数具有特定的保护级别。例如,您可能希望确保默认构造函数是私有或受保护的。