1)先说说返回值,我想问的是返回class型别时的情况,请看下面代码:
class Triangular{
public:
//其他接口略
Triangular_iterator begin() const
{
return Triangular_iterator(_beg_pos);
}
friend class Triangular_iterator;
private:
int _beg_pos;
}
我感觉上面的return后面的表达式,好像我们一般叫做强制型别转换,但是一个int怎么转成class呢?所以我想Triangular_iterator(_beg_pos)这个形式是不是把_beg_pos传给了Triangular_iterator类的constructor,然后由c++构造了一个class object,最后以传值返回? 不知道我的分析对否?
2)我看到这么一句话:"友谊关系的建立,通常是为了效率考虑."
是不是说如果声明一函数为friend,c++会为函数加上inline?
如果声明一class为friend,c++会为其成员函数加上inline?
不知道我说得对不对?
1.你说的是对的,在类型转换是确实构造了一个临时对象
2.friend和inline根本就是两回事,friend解决效率问题是因为它避免了调用类的接口函数带来的开销
而inline相当于一个宏,节省了调用函数是保存现场,调整寄存器,恢复现场等的开销。
两者最终都是避免了函数调用带来的开销,但本质是不一样的
>>"因为它避免了调用类的接口函数带来的开销"
friend 可以直接操作类的private member,而不需要通过 public member function 来访问,自然节省了开销