(原文链接:https://abseil.io/tips/ 译者:clangpp@gmail.com)
C++每周贴士
背景介绍:大约五年前,我们在Google内部开始发布一系列C++贴士,大约每周一个,被称为“C++每周贴士”(TotW)。这个系列非常成功,直到今天我们还在发布它们。(这也表明像C++这么丰富的语言短期内不会让我们缺少主题)。
我们不光讨论更精细的语言知识点,我们是真的“贴士”风格——提供建议或设计偏好。C++ TotW集合已经成为Google内部的圣经(canon),每周都会在代码审查和内部邮件列表讨论中被引用数千次。它们常以数字被引用,其中一些已经被简化为“totw/110”或"totw/77"。
我们决定将其中大部分贴士开放给Abseil开发社区,以及全体C++社区。在接下来的几个月里,我们会检查,改善然后发布新的贴士。不是所有的贴士都和Google外的世界有关;有些贴士是为我们的内部工具和概念量身定制的,有些已经随着语言的演进而变得过时了。但我们会在此页面上发布我们能发布的贴士和我们发现有价值的贴士(甚至撰写新的贴士!)
注:我们会保存贴士原有的数字命名规范,最初发布时间,这样已经接触过原有数字编号的那1.2万人就不必学习新的引用地址了。也是因为如此,新来的读者可能会发现一些编号的贴士不见了或顺序是乱的。但请放心,我们给你的都是干货。
注2:一些贴士会包括历史信息——虽然准确——但可能反映的是初写贴士时的设计哲学或使用方式。大部分情况下,我们已经更新了这些信息来反映现今的实践,而且在适当的地方标注了历史原因造成的例外情况。
因为这些贴士并不是按照原始顺序进行发布的,我们把它们按重新发布的时间列在了下面。
-
2020-11-11
每周贴士 #186: 最好把函数放在匿名命名空间里
每周贴士 #187:std::unique_ptr
必须被移动 -
2020-09-11
每周贴士 #116: 如何存储指向参数的引用
每周贴士 #165: 带初始化器的if
和switch
语句
每周贴士 #181: 访问StatusOr<T>
里的值
每周贴士 #5: 消逝的演出
每周贴士 #76: 使用absl::Status -
2020-09-01
每周贴士 #140: 常量:安全用法 -
2020-06-01
每周贴士 #5: 消逝的演出 -
2020-04-06
每周贴士 #163: 传递absl::optional
参数
每周贴士 #171: 别用哨兵值
每周贴士 #172: 指派初始化器
每周贴士 #173: 以Option结构体传递参数
每周贴士 #175: C++14和C++17里对字面值常量的改变
每周贴士 #176: 返回值优于输出参数
每周贴士 #177: 可赋值性与数据成员类型 -
2019-12-19
每周贴士 #108: 避免使用std::bind -
2019-12-12
每周贴士 #146: 默认与值初始化
每周贴士 #166: 你不是真正的复制 -
2019-11-25
每周贴士 #161: 局部变量有好有坏
每周贴士 #168:inline
变量 -
2019-09-09
每周贴士 #147: 负责任地使用穷举switch
-
2019-05-10
每周贴士 #103: Flag是全局变量
每周贴士 #45: 少用Flags,尤其是在库代码中
Tip of the Week #90: Retired Flags -
2018-09-30
每周贴士 #153: 别用using指示 -
2018-09-28
每周贴士 #136: 无序容器
每周贴士 #144: 关联容器的混杂查询
每周贴士 #152: AbslHashValue和你 -
2018-05-03
Tip of the Week #117: Copy Elision and Pass-by-value
Tip of the Week #148: Overload Sets
Tip of the Week #149: Object Lifetimes vs.=delete
-
2018-04-20
每周贴士 #11: 返回策略
Tip of the Week #120: Return Values are Untouchable
每周贴士 #24: 复制简明判定法 -
2018-03-05
Tip of the Week #141: Beware Implicit Conversions to bool
Tip of the Week #143: C++11 deleted functions (= delete
) -
2018-02-22
Tip of the Week #134: make_unique and private constructors
Tip of the Week #61: Default Member Initializers
Tip of the Week #93: using absl::Span -
2018-02-15
Tip of the Week #142: Multi-parameter Constructors andexplicit
Tip of the Week #88: Initialization: =, (), and {} -
2018-01-25
每周贴士 #10: 分割字符串,不必拘小节
每周贴士 #3: 字符串拼接,operator+
对比StrCat()
每周贴士 #36: 新的拼接API
Tip of the Week #59: Joining Tuples -
2017-12-21
每周贴士 #42: 工厂函数优于初始化方法
Tip of the Week #74: Delegating and Inheriting Constructors -
2017-12-07
Tip of the Week #123: absl::optional and std::unique_ptr
Tip of the Week #131: Special Member Functions and= default
-
2017-11-30
Tip of the Week #119: Using-declarations and namespace aliases
Tip of the Week #130: Namespace Naming -
2017-11-23
Tip of the Week #109: Meaningfulconst
in Function Declarations
Tip of the Week #126:make_unique
is the newnew
-
2017-11-16
Tip of the Week #112: emplace vs. push_back
Tip of the Week #65: Putting Things in their Place
Tip of the Week #99: Nonmember Interface Etiquette -
2017-11-09
Tip of the Week #135: Test the Contract, not the Implementation
每周贴士 #49: 参数依赖查找 -
2017-11-02
Tip of the Week #101: Return Values, References, and Lifetimes
Tip of the Week #107: Reference Lifetime Extension -
2017-10-26
Tip of the Week #64: Raw String Literals
Tip of the Week #86: Enumerating with Class
Tip of the Week #94: Callsite Readability and bool Parameters -
2017-10-20
Tip of the Week #122: Test Fixtures, Clarity, and Dataflow
Tip of the Week #55: Name Counting and unique_ptr
每周贴士 #77: 临时变量,移动,和复制 -
2017-09-26
每周贴士 #1: string_view