上周看完了这本大名鼎鼎的《Effective C++》,属实学到了很多技巧,本文是我阅读途中做的记录。尽管这本书出版于十多年前,且并没有对应C++11进行改进,但是其中介绍的很多技巧至今仍然适用,希望每个目标是用好C++的人都好好看一看这本书。
这一节先记录原书条款1-25的部分, 全文7.0k字, 余下部分下一篇文章放出。不熟悉C++的话阅读本文可能有些困难。本文同步存于我的Github仓库, 点击底部"阅读原文"可跳转(https://github.com/ZFhuang/Study-Notes/blob/main/Content/%E3%80%8AEffective%20C++%E3%80%8B%E7%AC%94%E8%AE%B0/README.md)
size_t
是一个typedef, 一般指无符号整型unsigned#define
并不被视作语言的一部分, 因为它属于预处理器, 是运行在编译阶段之前的#define
, 因为你这里define的变量/函数仅仅是机械地进行了替换, 不会进入编译器的记号表因此编译器无法看到define的变量名, 会出现很多难以追踪的常量const T * const Foo() const;
第一个const由于左边没有对象, 作用于右边的T上, 表示函数返回的指针指向的值不能改变. 第二个const左边有对象, 是指针符, 因此表示这个指针本身的值(地址)也是不能改变的. 第三个const左边是函数名, 表示这个函数也是const, 不会改变其内部对象的值.const引用
方式传递参数常量性转除
包装出非const版本, 要注意这里的写法比较特别(傻): 由于我们需要明确调用const版本的自己的重载函数, 因此需要先将自己用static_cast
转型为const, 从而令编译器调用const版本的函数, 随后再用const_cast
去掉返回值上的const标记.const_cast
, 去除const标记可能造成危险的后果=delete
操作, 让我们可以明确删除某些函数的生成unique_ptr
: 独占指针, 相当于以前的auto_ptr
, 只能移动而不可复制(复制操作默认是移动语义的), 没有其它成员变量, 可以用make_unique
来初始化数组shared_ptr
: 有引用计数的指针, 因此可以复制weak_ptr
: 不参与引用计数, 与shared_ptr
一起使用unique_ptr
shared_ptr
设置底层的引用计数器, 额外写一个删除器(deleter)在引用计数为0时调用using std::swap;
暴露出std的swap, 这样编译器进行函数搜索的时候会优先查找当前命名空间的swap, 找不到时会再去找std的swap扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有