那么,我的问题很简单:
指定一个默认的类构造函数为 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
等?
foo() noexcept = default
,如 https://en.cppreference.com/w/cpp/language/noexcept_spec 所示。 - Louis Semprininoexcept(true)
规范,除非包含的成员或基类具有noexcept(false)
的析构函数。请参见https://learn.microsoft.com/en-us/cpp/build/reference/zc-implicitnoexcept-implicit-exception-specifiers。不确定编译器提供的赋值运算符。 - MikeOnline