2012-09-06 32 views
1

我是初学者,想要学习C++,所以可能我的问题很基本。考虑下面的代码片段:重载时返回对局部变量的引用<<

class pounds 
{ 
private: 
    int m_p; 
    int m_cents; 
public: 
    pounds(){m_p = 0; m_cents= 0;} 
    pounds(int p, int cents) 
{ 
    m_p = p; 
    m_cents = cents; 
} 

friend ostream& operator << (ostream&, pounds&); 
friend istream& operator>>(istream&, pounds&); 

}; 

ostream& operator<< (ostream& op, pounds& p) 
{ 
    op<<p.m_p<<"and "<<p.m_cents<<endl; 
    return op; 
} 

istream& operator>>(istream& ip, pounds& p) 
{ 
    ip>>p.m_p>>p.m_cents; 
    return ip; 
} 

这个编译和似乎工作,但我没有返回一个局部变量的引用?提前致谢。

+4

不,参考已经在参数和参考的东西之外的功能,所以一切都很好。 – Xeo

+2

引用本身不是对象。是否返回对本地的引用取决于原始引用的引用。在你的情况下,没关系,因为'op'和'ip'指的是来自呼叫站点的对象。 – jrok

回答

2

这是正确的,因为没有局部变量,所以有references,当operators被调用时会被传递。

我建议你,因为,p没有在函数修改改变operator <<签名

std::ostream& operator << (ostream& os, const pounds& p); 

+0

非常感谢ForEveR,我想我现在明白了。 –