zoukankan      html  css  js  c++  java
  • 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: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对象赋值。

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

  • 相关阅读:
    memmove、memccpy和memcpy
    NSLocalizedString不起作用
    sign starfieldtech
    微软推荐的Get a code signing certificate流程和链接
    Driver Signing changes in Windows 10
    delphi 打开文件夹并定位到一个文件(关键是/select参数)
    key转成pvf
    nginx+apache+mysql+php+memcache+squid搭建集群web环境
    dddd
    Delphi系统变量:IsMultiThread对MM的影响
  • 原文地址:https://www.cnblogs.com/yulianggo/p/9389533.html
Copyright © 2011-2022 走看看