关于C++ ostream类的问题

classStore{private:std::ostream&fout;//这里为什么必须要加'&'?std::ostreamfout这样为什么不行呢?//int&可以... class Store
{
private:
std::ostream & fout; //这里为什么必须要加'&'? std::ostream fout这样为什么不行呢?
//int &可以赋值给int,但ostream &为什么不能赋值给ostream呢?
public:
Store(std::ostream & os) : fout(os){}
void operator()(const std::string & s)
{
int len = s.length();
fout.write((char *)&len, sizeof(std::size_t)); // store length
fout.write(s.data(), len); // store characters
}
};
展开
 我来答
kkenna
2014-06-07 · TA获得超过146个赞
知道答主
回答量:49
采纳率:0%
帮助的人:69.5万
展开全部

&引用表示的是隐式的指针,任何类型的应用类型实际传递的参数是对象的指针。

从构造函数分析,程序很可能传递的是cout这个标准输出流。

Store(std::cout); // 传入标准输出流

在此种调用情况下,由于cout和屏幕挂钩,复制的cout类型不可用于输出。

具体请测试以下代码

std::ostream cout2(cout);
cout2<<"out string test."<<endl;

 编译会报错:无法访问 private 成员

此种情况和你的代码中的fout去掉引用标记一样,因为ostream是无法被复制的对象。

leiqianlq
2014-06-07 · TA获得超过115个赞
知道小有建树答主
回答量:624
采纳率:0%
帮助的人:275万
展开全部
是为了 传值进来,如果只是 普通的变量 是 没法 传值的,要么是 指针,要么是 引用&
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bca7770
2014-06-07 · 超过27用户采纳过TA的回答
知道答主
回答量:111
采纳率:0%
帮助的人:61.6万
展开全部
不可能吧..... &表示引用, 你这样能通过?
追问
只能用&...不用通不过...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式