nothrow
(C++)
Microsoft 固有の仕様
関数の宣言に使用できる __declspec
拡張属性。
構文
return-type
__declspec(nothrow)
[call-convention] function-name ([argument-list])
解説
新しいコードでは、__declspec(nothrow)
ではなく noexcept
演算子を使用することをお勧めします。
この属性は、宣言された関数、および、その呼び出す関数が例外をスローしないことをコンパイラに伝えます。 ただし、ディレクティブは適用されません。 つまり、noexcept
や、std:c++17
モード (Visual Studio 2017 バージョン 15.5 以降)、throw()
とは異なり、std::terminate
が起動されることはありません。
同期例外処理モデル (現在は既定のモデル) の場合、コンパイラはこのような関数で特定のアンワインド可能オブジェクトの有効期間を追跡する機構を削除して、コード サイズを大幅に小さくできます。 次のプリプロセッサ ディレクティブを指定した場合、その下の 3 つの関数宣言は /std:c++14
モードで等価です。
#define WINAPI __declspec(nothrow) __stdcall
void WINAPI f1();
void __declspec(nothrow) __stdcall f2();
void __stdcall f3() throw();
/std:c++17
モードでは、throw()
は、関数から例外が投げられると std::terminate
が呼び出されるようになるため、__declspec(nothrow)
を使用する他のものと同等ではありません。
void __stdcall f3() throw();
番目の宣言は C++ 標準で定義されている構文を使用します。 C++17 では、throw()
キーワードは非推奨となりました。
Microsoft 固有の仕様はここまで
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示