爲什麼我不能讓運算符++()不成立?運算符++()nothrow不編譯
這可能是使用後綴++運算符(通過前綴++運算符)的少數優點之一。
例如,此代碼不能編譯
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'?這將有助於瞭解編譯器在抱怨什麼,但我認爲它可能很簡單,因爲當您使用非'nothrow'前綴運算符來實現它時,'nothrow'後綴操作符會抱怨。 – ShadowRanger
@ShadowRanger:就是這樣。 'nothrow'函數不能調用潛在的拋出函數。 –
在VC 2015中,我得到:錯誤C3646:'nothrow':未知覆蓋說明符 – Damian