オブジェクト参照を返すメンバ関数の一部に__declspec(nothrow)
を適用したいと思います。例えば、私は(MyClass.hで)この機能に追加したいと思います:参照を返す関数で__declspec(nothrow)を使用する
CMyClass& operator= (IN UInt32 nValue)
{
return (SetValue (nValue));
};
私はそうのような関数の戻り値の型の後にそれを追加する必要がありVC++ documentation says:
return-type __declspec(nothrow) [call-convention] function-name ([argument-list])
私がこれに従うと、私の機能のほとんどは__declspec(nothrow)
で正常に動作します。私は上記のメンバ関数(またはCMyClass&
を返す他のもの)のために、私はコンパイルエラーを取得することを行うときしかし、:
error C2059: syntax error : '__declspec(nothrow)'
私は、戻り値の型の前にそれを置くことができますし、それがその後、コンパイルしますが、 __declspec()が間違った場所に置かれた場合、コンパイラは警告やエラーを出さずにコンパイラが無視する可能性があることを示しています。
__declspec(nothrow)
を使用する正しい方法は何ですか?
なぜ標準に準拠した 'throw()'マーキングを使用しないのですか? –
これはかなり意味のない練習です。 MSVCコンパイラは* nothrow *宣言を許可しますが、宣言をbsとして扱うReal Compiler実装のグループの一部です。彼らはC++ 11でより多くのクレジットを獲得しましたが、例外仕様は廃止されました。新しいキーワードは* noexcept *です。気にしないでください。 –
__declspec(nothrow)はそうですが、VC++ではthrow()もnoexceptも動作しません。 – xxbbcc