![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Google C++每周贴士
文章平均质量分 84
Google C++每周贴士,每次一篇短文章,总结C++使用的心得和建议。
clangpp
邮箱:clangpp@gmail.com
展开
-
Google C++每周贴士 #45: 少用Flags,尤其是在库代码中
(原文链接:https://abseil.io/tips/45 译者:clangpp@gmail.com)每周贴士 #45: 少用Flags,尤其是在库代码中最初发布于:2013-06-03作者:Titus Winters短链接:abseil.io/tips/45“我真正想要的,是用不可静态预测的全局变量控制我代码的行为,其使用日志没有完全被记录,且移走它非常费劲。”——从来没有人在产品代码中普遍使用flags,尤其是在库里面,是一个错误。如果不是真的必要,不要使用flags。就这样,勿谓言翻译 2021-09-14 12:37:43 · 521 阅读 · 0 评论 -
Google C++每周贴士 #144: 关联容器的混杂查询
(原文链接:https://abseil.io/tips/144 译者:clangpp@gmail.com)每周贴士 #144: 关联容器的混杂查询最初发布于:2018-03-23作者:Samuel Benzaquen更新于:2020-04-06短链接:abseil.io/tips/144介绍关联容器为每个元素关联了一个键(key)。在容器中插入或查询元素需要一个等值的键。通常情况下,容器要求键是特定的类型,这可能导致调用处的低效率,因为需要在近似的类型之间做转换(比如std::strin翻译 2021-08-31 13:13:15 · 302 阅读 · 0 评论 -
Google C++每周贴士 #136: 无序容器
(原文链接:https://abseil.io/tips/136 译者:clangpp@gmail.com)每周贴士 #136: 无序容器最初发布于:2017-06-23作者:Matt Kulukundis更新于:2020-04-06短链接:abseil.io/tips/136“Sometimes, when the material is really good, you put expectations on yourself to make it the best possible s翻译 2021-08-31 12:27:35 · 2855 阅读 · 0 评论 -
Google C++每周贴士 #153: 别用using指示
(原文链接:https://abseil.io/tips/153 译者:clangpp@gmail.com)每周贴士 #153: 别用using指示最初发布于:2018-07-17作者:Roman Perepelitsa 和 Ashley Hedberg更新于:2020-04-06短链接:abseil.io/tips/153在我看来using指示就是定时炸弹,不论是对它处理的部分还是类型系统。 – Ashley Hedberg 带着对Warren Buffett的歉意长话短说(tl;dr)翻译 2021-08-28 13:50:11 · 193 阅读 · 0 评论 -
Google C++每周贴士 #147: 负责任地使用穷举`switch`
(原文链接:https://abseil.io/tips/147 译者:clangpp@gmail.com)每周贴士 #147: 负责任地使用穷举switch最初发布于:2018-04-25作者:Jim Newsome更新于:2020-04-06短链接:abseil.io/tips/147介绍指定了编译选项-Werror以后,在switch一个enum类型数值的语句里,如果某个enum的枚举值没有对应的case,且没有default标签,那么编译就会失败。这通常被称作 穷举 或者 无默认值翻译 2021-08-17 14:39:18 · 159 阅读 · 0 评论 -
Google C++每周贴士 #103: Flag是全局变量
(原文链接:https://abseil.io/tips/103 译者:clangpp@gmail.com)每周贴士 #103: Flag是全局变量作者:Matt Armstrong短链接:abseil.io/tips/103在.cc文件的全局作用域定义flag。在相应的.h文件里声明之(最多一次)。为什么要在头文件中声明东西?对我们大部分人来说,使用头文件是本能反应,所以我们也许忘记了它们为什么被使用:在头文件中声明东西,可以使其很容易被其他地方#include。整个程序看到的都是同样翻译 2021-08-10 12:53:47 · 632 阅读 · 0 评论 -
Google C++每周贴士 #168: `inline`变量
(原文链接:https://abseil.io/tips/168 译者:clangpp@gmail.com)每周贴士 #168: inline变量最初发布于:2019-09-12作者:James Dennett更新于:2020-04-06短链接:abseil.io/tips/168C++17提供的inline变量提供了一种在头文件中定义字符串常量的安全方式:inline constexpr absl::string_view kHelloWorld = "Hello World.";c翻译 2021-08-10 12:18:45 · 210 阅读 · 0 评论 -
Google C++每周贴士 #161: 局部变量有好有坏
(原文链接:https://abseil.io/tips/161 译者:clangpp@gmail.com)每周贴士 #161: 局部变量有好有坏最初发布于:2019-04-16作者:James Dennett更新于:2020-04-06短链接:abseil.io/tips/161We may freak out globally, but we suffer locally. – Jonathan Franzen概要局部变量挺好的,但是容易被滥用。通过将其限制在它能提供确切好处的地方,翻译 2021-08-03 14:42:19 · 247 阅读 · 0 评论 -
Google C++每周贴士 #166: 你不是真正的复制
(原文链接:https://abseil.io/tips/166 译者:clangpp@gmail.com)每周贴士 #166: 你不是真正的复制最初发布于:2019-08-28作者:Richard Smith更新于:2020-04-06短链接:abseil.io/tips/166Entia non sunt multiplicanda praeter necessitatem." (“Entities should not be multiplied without necessity”)翻译 2021-07-27 13:16:19 · 138 阅读 · 0 评论 -
Google C++每周贴士 #146: 默认与值初始化
(原文链接:https://abseil.io/tips/146 译者:clangpp@gmail.com)每周贴士 #146: 默认与值初始化最初发布于:2018-04-19作者:Dominic Hamon更新于:2020-04-06短链接:abseil.io/tips/146“通往成功的路总是在施工”——莉莉·汤普琳长话短说(TL;DR)为安全性和可读性起见,你应该假设标量对象(scalar objects)在被显式赋值之前都没有初始化为合理值。使用初始化器可以确保标量值被初始化成了翻译 2021-07-20 13:26:05 · 256 阅读 · 0 评论 -
Google C++每周贴士 #177: 可赋值性与数据成员类型
(原文链接:https://abseil.io/tips/177 译者:clangpp@gmail.com)每周贴士 #177: 可赋值性与数据成员类型最初发布于:2020-04-06作者:Titus Winters更新于:2020-04-06短链接:abseil.io/tips/177做类型的实现,先要决定类型的设计。先考虑API,后考虑实现细节。这件事的一个常见例子是,类型的可赋值性与数据成员限定符之间的权衡。决定如何呈现数据成员设想你正在写一个City类,然后正在探讨如何呈现它的数翻译 2021-07-18 08:14:20 · 134 阅读 · 0 评论 -
Google C++每周贴士 #172: 指派初始化器
(原文链接:https://abseil.io/tips/172 译者:clangpp@gmail.com)每周贴士 #172: 指派初始化器最初发布于:2019-12-11作者:Aaron Jacobs更新于:2020-04-06短链接:abseil.io/tips/172指派初始化器是C++20中的一种语法,以紧凑、易读、易维护的方式初始化结构体内容。为了取代繁复的struct Point { double x; double y; double z;};Point翻译 2021-07-13 13:28:43 · 333 阅读 · 0 评论 -
Google C++每周贴士 #171: 别用哨兵值
(原文链接:https://abseil.io/tips/171 译者:clangpp@gmail.com)每周贴士 #171: 别用哨兵值最初发布于:2019-11-08作者: Hyrum Wright更新于:2020-04-06短链接:abseil.io/tips/171哨兵值是指在特定上下文下有特别含义的值。例如,考虑如下API:// 返回账户余额,如果账户已关闭则返回-5。int AccountBalance();除了-5,每个int的值都可以是AccountBalance的翻译 2021-07-13 12:38:06 · 266 阅读 · 0 评论 -
Google C++每周贴士 #175: C++14和C++17里对字面值常量的改变
(原文链接:https://abseil.io/tips/175 译者:clangpp@gmail.com)每周贴士 #175: C++14和C++17里对字面值常量的改变最初发布于:2021-01-30作者: James Dennett更新于:2020-04-06短链接:abseil.io/tips/175“唯一不变的东西就是变化”——梅莉莎·埃瑟里奇概述C++现在有了一些特性,使得数字字面值更易读了。整数字面值可以被写作二进制了(0b00101010),正如十进制(42),十六进制翻译 2021-07-07 13:44:05 · 163 阅读 · 0 评论 -
Google C++每周贴士 #163: 传递`absl::optional`参数
(原文链接:https://abseil.io/tips/163 译者:clangpp@gmail.com)每周贴士 #163: 传递absl::optional参数最初发布于:2019-07-11作者:Ian Eldred Pudney更新于:2020-04-06短链接:abseil.io/tips/163空值真的是十亿美元的错误吗?问题比方说你需要实现一个函数,接收一个可能存在也可能不存在的参数。你可能禁不住去用现代的,闪瞎狗眼的absl::optional。但是吧,如果这个对象大到翻译 2021-07-07 12:31:39 · 3126 阅读 · 0 评论 -
Google C++每周贴士 #140: 常量:安全用法
(原文链接:https://abseil.io/tips/140 译者:clangpp@gmail.com)每周贴士 #140: 常量:安全用法最初发布于:2017-12-08作者:Matt Armstrong更新于:2020-05-06短链接:abseil.io/tips/140C++里表达常量最好的方式是什么?你也许知道这个词儿在英语里是什么意思,但在代码里却很容易被错误地表达。这里我们先定义几个核心概念,然后探讨一系列安全技巧。如果你还好奇的话,我们会接着聊聊容易弄错的情况细节,然后介翻译 2021-06-30 14:53:31 · 292 阅读 · 0 评论 -
Google C++每周贴士 #5: 消逝的演出
(原文链接:https://abseil.io/tips/5 译者:clangpp@gmail.com)每周贴士 #5: 消逝的演出最初发布于:2012-06-26更新于:2020-06-01短链接:abseil.io/tips/5“Don’t know what you got till it’s gone.” --Cinderella“直到失去之后才追悔莫及”——灰姑娘乐队有时候,为了正确地运用C++的库,你既需要理解库本身,又需要理解这门语言。那么……下面代码中的问题是什么?//翻译 2021-06-22 13:28:42 · 129 阅读 · 0 评论 -
Google C++每周贴士 #116: 如何存储指向参数的引用
(原文链接:https://abseil.io/tips/116 译者:clangpp@gmail.com)每周贴士 #116: 如何存储指向参数的引用最初发布于:2016-05-26作者:Alex Pilkiewicz更新于:2020-06-01短链接:abseil.io/tips/116From painting to image, from image to text, from text to voice, a sort of imaginary pointer indicates,翻译 2021-06-15 13:11:20 · 154 阅读 · 0 评论 -
Google C++每周贴士 #187: std::unique_ptr必须被移动
(原文链接:https://abseil.io/tips/187 译者:clangpp@gmail.com)每周贴士 #186: std::unique_ptr必须被移动最初发布于:2020-11-05作者:Andy Soffer更新于:2020-11-05短链接:abseil.io/tips/187如果你说第一幕中有个std::unique_ptr挂在墙上,那么在第二幕或者第三幕中它必须被移动,不然就没必要挂在那。——对不住啦契诃夫std::unique_ptr是用来表达所有权转移的。如翻译 2021-06-12 13:25:17 · 271 阅读 · 0 评论 -
Google C++每周贴士 #186: 最好把函数放在匿名命名空间里
(原文链接:https://abseil.io/tips/186 译者:clangpp@gmail.com)每周贴士 #186: 最好把函数放在匿名命名空间里最初发布于:2020-11-05作者:James Dennett 和 Jason Rennie更新于:2021-11-05短链接:abseil.io/tips/186“Everything should be made as simple as possible, but no simpler.” ~ RogerSessions’s翻译 2021-06-11 13:15:45 · 428 阅读 · 1 评论 -
Google C++每周贴士 #77: 临时变量,移动,和复制
(原文链接:https://abseil.io/tips/77 译者:clangpp@gmail.com)每周贴士 #77: 临时变量,移动,和复制最初发布于:2014-07-09作者:Titus Winters更新于:2017-10-20短链接:abseil.io/tips/77我们正在尝试给语言专家以外的人解释清楚C++11会怎样改变代码世界,因此在“什么时候发生复制?”系列中又增加了一篇文章。这也是更广泛的尝试之中的一部分,试图用一套更简单的规则简化C++中的变量复制规则。你会数到2翻译 2021-05-25 13:07:26 · 261 阅读 · 0 评论 -
Google C++每周贴士 #165: 带初始化器的`if`和`switch`语句
(原文链接:https://abseil.io/tips/165 译者:clangpp@gmail.com)每周贴士 #165: 带初始化器的if和switch语句最初发布于:2019-08-17作者:Thomas Köppe更新于:2020-01-17短链接:abseil.io/tips/165如果你用不到条件控制流程,那可以到此为止了。一个新语法C++17 允许 if和switch语句包含初始化器:if (init; cond) { /* ... */ }switch (init翻译 2021-05-18 13:36:40 · 160 阅读 · 0 评论 -
Google C++每周贴士 #181: 访问StatusOr<T>里的值
(原文链接:https://abseil.io/tips/76 译者:clangpp@gmail.com)每周贴士 #181: 访问StatusOr<T>里的值最初发布于:2020-07-09作者:Michael Sheely更新于:2020-09-02短链接:abseil.io/tips/181StatusOr的可读性(StatusOr<Readability>):你不需要做选择!当需要访问absl::StatusOr<T>里的对象的时候,我们应该翻译 2021-05-12 13:49:13 · 1835 阅读 · 0 评论 -
Google C++每周贴士 #49: 参数依赖查找
(原文链接:https://abseil.io/tips/49 译者:clangpp@gmail.com)每周贴士 #49: 参数依赖查找最初发布于:2013-07-14“…whatever disappearing trail of its legalistic argle-bargle one chooses to follow…” –Antonin Scalia, U.S. v W...翻译 2021-05-05 13:08:08 · 304 阅读 · 0 评论 -
Google C++每周贴士 #76: 使用absl::Status
(原文链接:https://abseil.io/tips/76 译者:clangpp@gmail.com)每周贴士 #76: 使用absl::Status最初发布于:2014-05-04作者:Titus Winters更新于:2020-02-06短链接:abseil.io/tips/76有同学提问在什么时候、该怎么使用absl::Status,所以这里准备了一些应该使用Status的情况,以及使用的时候要注意些什么。传达意图且强制调用者处理错误使用Status来强制调用者处理可能出现的错翻译 2021-05-04 13:12:00 · 1943 阅读 · 0 评论 -
Google C++每周贴士 #176: 返回值优于输出参数
(原文链接:https://abseil.io/tips/176 译者:clangpp@gmail.com)每周贴士 #176: 返回值优于输出参数最初发布于:2020-03-12作者:Etienne Dechamps更新于:2020-04-06短链接:abseil.io/tips/176问题考察如下代码:// 从给定的`doodad`中提取`foos_spec`和`bar_s...翻译 2020-04-14 08:57:19 · 395 阅读 · 0 评论 -
Google C++每周贴士 #173: 以Option结构体传递参数
(原文链接:https://abseil.io/tips/173 译者:clangpp@gmail.com)C++每周贴士 #173: 以Option结构体传递参数最初发布于:2019-12-19作者:John Bandela更新于:2020-04-06短链接:abseil.io/tips/173It came without packages, boxes or bags. An...翻译 2020-04-08 10:45:04 · 405 阅读 · 0 评论 -
Google C++每周贴士 #108: 避免使用std::bind
(原文链接:https://abseil.io/tips/108 译者:clangpp@gmail.com)每周贴士 #108: 避免使用std::bind最初发布于2016-01-07作者:Roman Perepelitsa (roman.perepelitsa@gmail.com)更新于2019-12-19短链接:abseil.io/tips/108避免使用std::bind...翻译 2020-04-06 06:34:45 · 1134 阅读 · 0 评论 -
Google C++每周贴士 #3: 字符串拼接,operator+对比StrCat()
C++每周贴士 #3: 字符串拼接,operator+对比StrCat()原文链接:https://abseil.io/tips/3最初发布于2012-05-11更新于2017-09-18校订于2018-01-22当审查代码的的人对程序员说“别用字符串拼接操作符,太低效了”,程序员常常会一脸吃惊:std::string::operator+怎么会低效呢?难道这不是很难出错的方式吗?...翻译 2018-09-26 15:10:04 · 1198 阅读 · 0 评论 -
Google C++每周贴士 #1: string_view
C++贴士 #1: string_view原文链接: https://abseil.io/tips/1最初发布于2012-04-20作者: Michael Chastain (mec.desktop@gmail.com)更新于2017-09-18什么是string_view,以及为什么你应该关心?如果需要写一个函数接受(常量)字符串为输入参数,你有四个选项:其中两个你已经知道了,另...翻译 2018-09-26 14:04:11 · 1569 阅读 · 0 评论 -
Google C++每周贴士 #24: 复制简明判定法
(原文链接:https://abseil.io/tips/24 译者:clangpp@gmail.com)Tip of the Week #24: Copies, Abbrv.C++每周贴士 #24: 复制简明判定法原始发布于2012-11-26作者:Titus Winters, (titus@google.com)和Chandler Carruth (chandlerc@google....翻译 2018-10-04 13:08:26 · 213 阅读 · 0 评论 -
Google C++每周贴士 #10: 分割字符串,不必拘小节
C++每周贴士 #10: 分割字符串,不必拘小节原文链接:https://abseil.io/tips/10最初发布于:2012-08-16作者:Greg Miller (jgm@google.com)更新于:2018-01-24I tend to have an odd split in my mind. –John Cleese(译者注:在文章开始引用一段名人名言是TotW的一...翻译 2018-09-27 14:04:54 · 665 阅读 · 0 评论 -
Google C++每周贴士
C++每周贴士原文链接:https://abseil.io/tips/背景介绍:大约五年前,我们在Google内部开始发布一系列C++贴士,大约每周一个,被称为“C++每周贴士”(TotW)。这个系列非常成功,直到今天我们还在发布它们。(这也表明像C++这么丰富的语言短期内不会让我们没主题可发)。我们不光讨论更精细的语言知识点,我们是真的“贴士”风格——提供建议或设计偏好。C++ Tot...翻译 2018-09-27 15:16:23 · 669 阅读 · 0 评论 -
Google C++每周贴士 #36: 新的拼接API
(原文链接:https://abseil.io/tips/36 译者:clangpp@gmail.com)C++ 每周贴士 #36: 新的连接(Join)API最初发布于2013-03-21作者:Greg Miller (jgm@google.com)更新于2018-01-24“I got a good mind to join a club and beat you over th...翻译 2018-10-09 13:24:20 · 484 阅读 · 0 评论 -
Google C++每周贴士 #42: 工厂函数优于初始化方法
(原文链接:https://abseil.io/tips/42 译者:clangpp@gmail.com)C++每周贴士 #42: 工厂函数优于初始化方法最初发布于2013-05-10作者:Geoffrey Romer (gromer@google.com)校订于2017-12-21“The man who builds a factory builds a temple; the ...翻译 2018-10-10 15:00:00 · 1188 阅读 · 0 评论 -
Google C++每周贴士 #152: AbslHashValue和你
(原文链接:https://abseil.io/tips/152 译者:clangpp@gmail.com)每周贴士 #152: AbslHashValue和你最初发布于2018-06-21作者:Matt Kulukundis(译者注:这库用起来就一个字儿,爽!)“I love Mozart, but I often make a terrible hash of it.” – Si...翻译 2019-04-02 14:11:31 · 1570 阅读 · 0 评论 -
Google C++每周贴士 #11: 返回策略
(原文链接:https://abseil.io/tips/10 译者:clangpp)C++每周贴士 #11: 返回策略最初发布于2012-08-16作者:Paul S. R. Chisholm (p.s.r.chisholm@google.com)Frodo: There’ll be none left for the return journey. Sam: I don’t thi...翻译 2018-10-02 14:42:56 · 323 阅读 · 0 评论