[英]Is a defaulted constructor/assignment noexcept/constexpr by default?
所以,我的问题很简单:
将默认类构造函数指定为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
等等?
2未被定义为删除的明确,违约函数可以声明
constexpr
只有它会被隐含声明为constexpr
。 如果函数在其第一个声明中明确默认,
- 如果隐式声明是,则隐含地认为是
constexpr
,并且,- 它具有相同的异常规范,就好像它已被隐式声明([except.spec])。
3如果使用异常规范 ([except.spec])使用隐式声明的异常规范声明显式默认的函数,则
如果函数在其第一个声明中明确默认,则将其定义为已删除;
否则,该计划是不正确的。
换句话说, foo() = default;
,这必然是foo
默认构造函数的第一个声明,如果可能的话,将是“ constexpr
”,如果可能的话,将是“ noexcept
”。 明确写constexpr
和noexcept
仍然有用; 它意味着“如果它不能是constexpr
/ noexcept
就会对我大喊大叫”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.