【发布时间】:2016-06-10 05:23:06
【问题描述】:
使用friend 在类定义中定义全局函数是否被认为是一种好习惯,即使不需要访问私有成员也是如此。例如
template<typename T>
class A {
public:
A(T v);
T value() const;
friend A operator+(T n, const A& a) {
return A(a.value() + n);
}
};
而不是
template<typename T>
class A {
public:
A(T v);
T value() const;
};
template<typename T>
A<T> operator+(T n, const A<T>& a) {
return A<T>(a.value() + n);
}
即使operator+ 只使用公开的value()。
这个是常做的吗,我们不推荐吗?
【问题讨论】:
-
你为什么要打破你的封装?如果您不需要封装,只需将所有成员公开即可。如果要封装,不要左右交友。
-
不推荐。
-
友元函数的一个优点是它不是模板,并且在某些情况下会更改重载顺序解析。
-
@SergeyA 类中内联的
friend函数的定义在哪里打破了封装规则? -
@πάνταῥεῖ,你为什么要给不需要访问私有成员的函数加好友?
标签: c++ templates operator-overloading friend