Loading

c++0.8-----快速定位c++源码位置的小技巧

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:\mingw\lib\gcc\mingw32\6.3.0\include\c++\iostream:40:0,
from copy.cpp:1:
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\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对象赋值。

 

当然这种方法不是百试百灵,需要一些运气,有时候系统直接处理了,不会给出具体位置的。

posted @ 2018-07-30 11:12  FishLight  阅读(704)  评论(0编辑  收藏  举报