演算子++()をnothrowにできないのはなぜですか?演算子++()nothrowがコンパイルされない
これは、接頭辞++演算子(接頭辞++演算子よりも)を使用した場合のいくつかの利点の1つです。
例えば、このコードは側
class Number
{
public:
Number& operator++() // ++ prefix
{
++m_c;
return *this;
}
Number operator++ (int) nothrow // postfix ++
{
Number result(*this); // make a copy for result
++(*this); // Now use the prefix version to do the work
return result; // return the copy (the old) value.
}
int m_c;
};
をコンパイルしないが後置演算子は、スレッドセーフ行うことができることに注意してください。
接頭辞演算子 'nothrow'を宣言していない理由はありますか?コンパイラが何を不平にしているのか知るのに役立つでしょうが、 'notrow'プレフィックス演算子を使用してそれを実装するときに不快な後置演算子が不平を言ってしまうことが簡単に分かります。 – ShadowRanger
@ShadowRanger:それはまさにそれです。 'nothrow'関数は投げられる可能性のある関数を呼び出すことはできません。 –
VC 2015でエラーC3646: 'nothrow':不明なオーバーライド指定子 – Damian