c++ primer第五版 449页 有一句话:iostream类阻止了拷贝,以避免多个对象写入或读取相同的IO缓冲。
这个时候,很多读者也许都想找找源码,看它是怎么实现的,这个时候可以采用试错的方法:
我明知道iostream成员不能用构造创建对象,但我偏去试一试:
iostream im;
这时候查找报错信息:
copy.cpp: In function 'int main()':
copy.cpp:36:11: error: 'std::basic_iostream<_CharT, _Traits>::basic_iostream() [with _CharT = char; _Traits = std::char_traits<char>]' is protected within this context
iostream im;
In file included from c:mingwlibgccmingw326.3.0includec++iostream:40:0,
from copy.cpp:1:
c:mingwlibgccmingw326.3.0includec++istream:859:7: note: declared protected here
basic_iostream()
发现这里已经给出了代码具体位置了,直接复制后查找istream文件的859行就行了。
查找结果:
protected:
basic_iostream()
: __istream_type(), __ostream_type() { }
还可以看看其他相关知识,发现:
basic_iostream(const basic_iostream&) = delete;
basic_iostream& operator=(const basic_iostream&) = delete;
也就是说,在类外面既不可以默认构造iostream对象,不能拷贝构造iostream对象,也不可以给iostream对象赋值。
当然这种方法不是百试百灵,需要一些运气,有时候系统直接处理了,不会给出具体位置的。