一元负载重载:成员函数还是非成员函数?

6
鉴于前缀一元运算符可以“通过没有参数的非静态成员函数或一个带有一个参数的非成员函数实现”(§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])。还有什么微妙之处吗?

1
在引用标准的特定部分时,您可能需要提及您所参考的版本。 - André Caron
引用自C++11的n3290版本,这就是为什么我能够提到“duration”的原因。 - Cubbi
2个回答

2
据我所知,与决定非运算符函数是成员函数还是非成员函数相比,并没有什么不同。显然,在可能的情况下(例如标准算法),优先选择非成员、非友元函数。请注意保留HTML标签。

0

尽可能使用成员变量更有意义,因为您不必与友元纠缠不清。但除此之外,这只是一种代码风格的决定。


1
Sutter/Alexandrescu的新时代指南中提到,如果可能的话,将所有内容都设置为非成员非友元,这个怎么看? - Cubbi
@Cubbi 是的,尽可能给予最少的访问权限总是最好的,但我更喜欢我的代码简洁。 - Šimon Tóth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接