[英]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.