一元减负荷:会员还是非会员?

Cub*_*bbi 6 c++ operator-overloading

鉴于前缀一元运算符可以" 由一个没有参数的非静态成员函数或一个参数的非成员函数实现 "(§13.5.1[over.unary]/1),除了通常之外还有区别吗封装/代码重用设计原理适用于任何成员/非成员函数选择?

对于二元运算符,存在语义差异,因为非成员允许对其左侧操作数进行隐式转换.对于一元运算符似乎没有类似的东西,但标准将std::complex一元否定运算符定义为非成员(第26.4.6节[complex.ops]),而一元std::valarraystd::duration一元否定运算符是成员(§26.6.2.6[valarray.unary],§20.11.5.3[time.duration.arithmetic]).有细微差别吗?

Mar*_*k B 2

据我所知,与决定非运算符函数应该是成员还是非成员相比没有区别。显然,如果可能的话,更喜欢非成员、非朋友(就像标准算法一样)。