【发布时间】:2016-03-22 17:24:33
【问题描述】:
所以,我的问题很简单:
将默认的类构造函数指定为noexcept 或constexpr(或任何其他你可以做的事情)有什么意义吗?
struct foo
{
foo() = default;
// vs
constexpr foo() noexcept = default;
// same thing would apply for copy/move ctors and assignment operators
};
两者的行为方式是否相同?
是否取决于类是否为 POD?
例如,对于上面的示例,两者的行为方式相同,而例如,如果我有一个使用课堂分配的私有成员 std::vector<int> v = { 1, 2, 3, 4 };,则默认情况下 foo() = default; 不会是 noexcept 而不是 constexpr。
通过编写foo() = default;,编译器是否只会选择最佳版本:noexcept(如果可能)和constexpr(如果可能)等等?
【问题讨论】: