关于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
}
}; 展开
{
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
}
}; 展开
3个回答
展开全部
&引用表示的是隐式的指针,任何类型的应用类型实际传递的参数是对象的指针。
从构造函数分析,程序很可能传递的是cout这个标准输出流。
Store(std::cout); // 传入标准输出流
在此种调用情况下,由于cout和屏幕挂钩,复制的cout类型不可用于输出。
具体请测试以下代码
std::ostream cout2(cout);
cout2<<"out string test."<<endl;
编译会报错:无法访问 private 成员
此种情况和你的代码中的fout去掉引用标记一样,因为ostream是无法被复制的对象。
展开全部
是为了 传值进来,如果只是 普通的变量 是 没法 传值的,要么是 指针,要么是 引用&
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不可能吧..... &表示引用, 你这样能通过?
追问
只能用&...不用通不过...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询