10.27 __declspec(nothrow)

__declspec(nothrow) 属性は、関数の呼び出しによって C++例外が被発呼側から呼び出し元に伝播されないことを示します。

ARM ライブラリヘッダにより、この修飾子は、ISO C 標準で例外をスローしないことが規定されている C 関数の宣言に自動的に追加されます。ただし、C++ コンテキストに例外をスローする可能性がある C ライブラリ関数に対して生成される unwind テーブルにいくつかの制限があります。例えば、bsearchqsort です。

この __declspec 属性には、同等の関数属性 __attribute__((nothrow)) があります。

使用法

コンパイラは、関数によって例外がスローされないことを認識している場合、その関数の呼び出し元用に生成する例外処理テーブルのサイズを縮小できることがあります。

制限

関数の呼び出しによって C++例外が被発呼側から呼び出し元に伝播される場合、動作は定義されません。
例外がイネーブルになった状態でコンパイルしないと、この修飾子は無視されます。

struct S
{
    ~S();
};
__declspec(nothrow) extern void f(void);
void g(void)
{
    S s;
    f();
}
関連する参考文書
8.83 --force_new_nothrow、--no_force_new_nothrow
11.5 ARM C++ での ::operator new 関数の使用
10.46 __attribute__((nothrow)) 関数属性
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.