【发布时间】:2016-12-04 15:22:40
【问题描述】:
什么时候应该在 C++11 中使用 default 关键字?
现在认为写作不好
struct Foo {
};
应该写
struct Foo {
Foo() = default;
};
?
【问题讨论】:
标签: c++11 constructor default
什么时候应该在 C++11 中使用 default 关键字?
现在认为写作不好
struct Foo {
};
应该写
struct Foo {
Foo() = default;
};
?
【问题讨论】:
标签: c++11 constructor default
考虑一下default constructor 将不由编译器提供的情况。然后你可以使用= default 告诉编译器无论如何都要为你创建一个默认构造函数。
否则(除非您需要特殊的默认构造函数)没有理由以任何方式指定默认构造函数(有或没有= default)。
在您的示例中,不需要“显式”= default 构造函数。更多的是风格问题。
【讨论】:
如here 所述,当您创建带参数的构造函数时,不会生成默认构造函数。在这些情况下,使用 default 关键字会为类生成 default constructor。
但是,请仔细考虑您正在处理的对象是否真的应该具有默认构造函数;也就是说,如果其他对象的默认初始化是正确的做法。请记住,POD 成员默认情况下不会初始化,并且可能包含没有data member initalisers 的垃圾数据。
【讨论】:
这似乎是一个基于意见的问题。然而,似乎第一个选项是最常用的,因为第二个选项更冗长,程序员倾向于不使用默认值,除非默认操作必须是deleteed。
【讨论】:
如果您提供显式的非默认构造函数,您将不会获得编译器提供的默认值。在这种情况下,您可以使用 default 关键字来强制编译器提供它。
另一种情况是,如果您想确保您的默认构造函数具有特定的保护级别。例如,您可能希望确保您的默认构造函数是私有的或受保护的。
【讨论】: