鉴于前缀一元运算符可以“由非静态成员函数实现,没有参数或非成员函数具有一个参数”(§13.5.1[over.unary] / 1)除了适用于任何成员/非成员函数选择的通常的封装/代码重用设计原理之外,是否存在差异?
对于二元运算符there's a semantic difference,因为非成员允许对其左侧操作数进行隐式转换。对于一元运算符似乎没有类似的东西,但标准将std::complex
的一元否定运算符定义为非成员(第26.4.6节[complex.ops]),而{{1 }和std::valarray
的一元否定运算符是成员(§26.6.2.6[valarray.unary],§20.11.5.3[time.duration.arithmetic])。有细微差别吗?
答案 0 :(得分:2)
据我所知,与决定非运营商职能是成员还是非成员相比,没有差异。显然,在可能的情况下(如标准算法)更喜欢非成员,非朋友。
答案 1 :(得分:0)
尽可能使用会员更有意义,因为你不必和朋友发疯。但除此之外,它只是一种代码风格的决定。