现代 C++ 编程实战
基于现代 C++ 编写可维护的高性能代码
吴咏炜  前 Intel 资深软件架构师
专栏
已完结·共 51 讲
|
3.4w 人已学
|
收藏
这种情况下,函数的返回值只能是指针或其变体形式。如果返回类型是 shape,实际却返回一个 circle,编译器不会报错,但结果多半是错的。这种现象叫对象切片(object slicing),是 C++ 特有的一种编码错误。这种错误不是语法错误,而是一个对象复制相关的语义错误,也算是 C++ 的一个陷阱了,大家需要小心这个问题。
来自:01 | 堆、栈、RAII:C++里该如何管理资源?
19 人划过
在 C++11 之前,返回一个本地对象意味着这个对象会被拷贝,除非编译器发现可以做返回值优化(named return value optimization,或 NRVO),能把对象直接构造到调用者的栈上。
来自:03 | 右值和移动究竟解决了什么问题?
15 人划过
如果我提供了移动构造函数而没有手动提供拷贝构造函数,那后者自动被禁用
来自:02 | 自己动手,实现C++的智能指针
11 人划过
C++ 的构造函数是不能返回错误码的,所以你根本不能用构造函数来做可能出错的事情。你不得不定义一个只能清零的构造函数,再使用一个 init 函数来做真正的构造操作。
来自:06 | 异常:用还是不用,这是个问题
6 人划过
decltype(表达式) (表达式不是变量名,但包括 decltype((变量名)) 的情况)可以获得表达式的引用类型;除非表达式的结果是个纯右值(prvalue),此时结果仍然是值类型。
来自:08 | 易用性改进 I:自动类型推断和初始化
5 人划过
鸭子类型使得开发者可以不使用继承体系来灵活地实现一些“约定”,尤其是使得混合不同来源、使用不同对象继承体系的代码成为可能。唯一的要求只是,这些不同的对象有“共通”的成员函数。这些成员函数应当有相同的名字和相同结构的参数(并不要求参数类型相同)。
来自:12 | 编译期多态:泛型编程和模板入门
5 人划过
在这个 constexpr 函数里,是不能写 static_assert(n >= 0) 的。一个 constexpr 函数仍然可以作为普通函数使用——显然,传入一个普通 int 是不能使用静态断言的
来自:15 | constexpr:一个常态的世界
4 人划过
后缀 来将用户提供的字面量转换成实际的类型
来自:09 | 易用性改进 II:字面量、静态断言和成员函数说明符
4 人划过
要进行编译期编程,最主要的一点,是需要把计算转变成类型推导。
来自:13 | 编译期能做些什么?一个完整的计算世界
4 人划过
这个代码的目的是消除大部分执行路径上的加锁开销。原本的意图是:如果 inst_ptr_ 没有被初始化,执行才会进入加锁的路径,防止单件被构造多次;如果 inst_ptr_ 已经被初始化,那它就会被直接返回,不会产生额外的开销。虽然看上去很美,但它一样有着上面提到的问题
来自:20 | 内存模型和atomic:理解并发的复杂性
3 人划过
*精彩内容为该课程各文章中划线次数最多的内容
免费试读
讲师

吴咏炜

前 Intel 资深软件架构师

吴咏炜,前英特尔亚太研发中心资深系统架构师。1995 年毕业于复旦大学,​​从事软件开发工作 20 多年,​历任开发工程师、项目经理、开发经理、架构师等职务。作者热爱软件技术,热爱​ ​C++,热爱开源;对于精炼、易于维护的代码追求不懈。曾参与翻译《编程大师访谈录》。Gi...查看更多
编辑推荐
讲师的其他课程
Vim 实用技巧必知必会
吴咏炜
前 Intel 资深软件架构师

25讲 | 21756 人已学习

¥59¥99
包含这门课的学习路径

Android工程师

8门课程 35.1w人学习

C++工程师

7门课程 51.5w人学习
看过的人还看了
数据结构与算法之美
王争
前 Google 工程师

81讲 | 283786 人已学习

¥68¥199
罗剑锋的 C++ 实战笔记
罗剑锋
前奇虎 360 技术专家,Nginx/OpenResty 开源项目贡献者

32讲 | 35519 人已学习

¥59¥129
左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家

119讲 | 180989 人已学习

¥98¥399
设计模式之美
王争
前 Google 工程师,《数据结构与算法之美》专栏作者

113讲 | 123454 人已学习

¥98¥299
现代 C++20 实战高手课
卢誉声
Autodesk 首席工程师

29讲 | 3787 人已学习

¥59¥99
MySQL 实战 45 讲
林晓斌
网名丁奇,前腾讯云数据库负责人

49讲 | 224923 人已学习

¥68¥199