void fun(ostream &os) //可以
main中,
ostream &os //不可以,为什么?
ostream os //不可以,为什么
void fun(ostream &os) //可以
main中,
ostream &os //不可以,为什么?
ostream os //不可以,为什么
见std::ostream::ostream
initialization (1) explicit ostream (streambuf* sb);
copy (2) ostream& (const ostream&) = delete;
move (3) protected: ostream& (ostream&& x);
没有无参数构造函数。
拷贝构造被标记为已删除。
当使用pass-by-value
进行函数调用时会对参数进行拷贝初始化,而C++系统由于避免IO资源冲突或内存泄露问题从而规定了IO对象无法进行拷贝。
在STL中iostream的拷贝构造函数被设置为delete
(C++11),旧版本中将其拷贝构造函数和拷贝赋值操作符声明为private
且无定义来阻止拷贝。(此处可参见《Effective C++》条款06)
所以将iostream
作为参数进行传递时需使用pass-by-reference
而非pass-by-value
。
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
ostream &os //不可以,为什么。
当然不可以,引用不能为空,必须初始化。
ostream &os = std:cout;
就可以。
ostream os //不可以,为什么。
因为ostream设计上是一个基类,它抽象了底层的行为,它本身什么功能都没有,当然不允许构造实例。
ostream *os = new ofstream();
作为基类指针完全可以。
void fun(ostream &os) //可以
你这么写的话,就要求调用fun的时候必须传入一个有效的引用。
比如fun(std::cout),否则编译器还是会报错。