質問のタイトルがすべてを物語っています。default
コンパイラによって暗黙的に実装されたコピー/移動割り当て/ ctor が宣言されているかどうかを知る必要がありnoexcept
ます。
2 に答える
4
標準は次のように述べています。
継承コンストラクター (12.9) および暗黙的に宣言された特別なメンバー関数 (条項 12) には、例外仕様があります。f が継承コンストラクター、または暗黙的に宣言されたデフォルト コンストラクター、コピー コンストラクター、移動コンストラクター、デストラクタ、コピー代入演算子、または移動代入演算子である場合、その暗黙的な例外指定は、T が許可されている場合にのみ、型 ID T を指定します。 f の暗黙の定義によって直接呼び出される関数の例外仕様。f が直接呼び出す関数がすべての例外を許可する場合、f はすべての例外を許可し、f が直接呼び出すすべての関数が例外を許可しない場合、f は例外仕様 noexcept(true) を持ちます。
したがって、暗黙的に宣言されたクラスのコピー/移動割り当て/ctor が noexcept(false) とマークされているものを呼び出す必要がない場合は、noexcept(true) 指定子を持ちます。呼び出す必要がある関数は、基本クラスおよび非静的データ メンバーのコピー/移動割り当て/ctor です。
于 2015-08-16T22:01:27.813 に答える