鉴于前缀一元运算符可以“通过没有参数的非静态成员函数或一个带有一个参数的非成员函数实现”(§13.5.1[over.unary]/1),除了适用于任何成员/非成员函数选择的封装/代码重用设计理念之外,是否存在其他区别?
对于二元运算符,存在语义上的区别,因为非成员允许其左操作数进行隐式转换。似乎对于一元运算符并没有这样的情况,然而标准将
对于二元运算符,存在语义上的区别,因为非成员允许其左操作数进行隐式转换。似乎对于一元运算符并没有这样的情况,然而标准将
std::complex
的一元否定运算符定义为非成员(§26.4.6[complex.ops]),而std::valarray
和std::duration
的一元否定运算符是成员(§26.6.2.6[valarray.unary],§20.11.5.3[time.duration.arithmetic])。还有什么微妙之处吗?