• 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对象赋值。

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

  • 相关阅读:
    vue 安装scss
    element-ui 弹出添加拖拽功能
    百度网盘SVIP不限速Mac破解版(亲测可用)
    cookie,localStorage和sessionStorage
    ES6中class的实现原理
    闭包的使用场景
    HTTPS原理以及流程
    DOMContentLoaded和load的区别
    js中的函数防抖与节流
    对vuex的理解
  • 原文地址:https://www.cnblogs.com/yulianggo/p/9389533.html
Copyright © 2020-2023  润新知