我什么时候应该在C ++ 11中使用default
关键字?
现在认为写
是不好的struct Foo {
};
一个人应该写
struct Foo {
Foo() = default;
};
答案 0 :(得分:2)
考虑编译器提供default constructor not 的情况。然后你可以使用= default
告诉编译器为你创建一个默认的构造函数。
否则(除非你需要一个特殊的默认构造函数),没有理由以任何方式指定默认构造函数(有或没有= default
)。
在您的示例中,不需要"显式" = default
构造函数。这更像是一种风格问题。
答案 1 :(得分:2)
如前所述here,当您使用参数创建构造函数时,不会生成默认构造函数。在这些情况下,使用default
关键字会为该类生成default constructor。
但是,请仔细考虑您正在处理的对象是否应该具有默认构造函数;也就是说,如果其他对象的默认初始化是正确的事情。请注意,默认情况下POD成员不会被初始化,并且可能包含没有data member initalisers的垃圾数据。
答案 2 :(得分:2)
这似乎是一个基于意见的问题。但是,似乎第一个选项最常用,因为第二个选项更冗长,程序员不会使用默认值,除非默认操作必须delete
。
答案 3 :(得分:0)
如果提供显式的非默认构造函数,则不会获得编译器提供的默认值。在这种情况下,您可以使用default关键字强制编译器提供它。
另一种情况是,如果您想确保您的默认构造函数具有特定的保护级别。例如,您可能希望确保默认构造函数是私有或受保护的。