为什么我不能让运算符++()不成立?运算符++()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