4006-998-758
3000+课程任你选择
现代C++的新特性
研发学院 方法 优化 C++11 开课时间:2021-07-03
张银奎

1996年毕业于上海交通大学信息与控制工程系,在软件产业工作20年,拥有13年Intel工作经历,任职于INTEL公司的上海研发中心,先后在PASD、DEG、CPG、PCCG、VPG等部门工作。在英特尔先后从事软件开发、系统测试、架构设计等工作,呈担任英特尔架构事业部视觉与并行计算事业群担任首席软件架构师职务。

对IA-32架构、操作系统内核、驱动程序、设计模式、软件调优、C和C++等有深厚的工作经验,对于精炼、易于维护的代码有不懈追求。10多年GPU、CPG等深度优化技术积累和代码重构经验,每天的主要工作除了设计和编写代码外,就是调试和重构C语言代码。


查看老师详情
课程内容

上篇

C++演进简史(C++11、14、17)

Bjarne简介,C++缘起,C++的优势和不足,ISO C++,C++98,C++03,C++11,C++11的目标,“看起来像新的语言”,C++14概要,C++17概要,C++20,VC11,VC13,VC15,VC17和VC19,Clang,编译器技术的革新

30min


数学天才和STL(C++11)

基本问题,模板容器,Alexander Stepanov,标准化,源代码,STL的演进,std::array,GDB下观察STL容器,STL的调试问题,冗长的调试符号,“显示的都是什么鬼?”,pretty printer,GDB7,在GDB中观察STL容器的问题和解决方法。

30min


选择STL容器的性能考虑(C++11、14、17、20)

对象组织,向量和链表比较,std::string_view,std::span,在调试器下看数据布局,插入和删除操作,性能差异

30min


匿名的原因和方法(C++11)

问题,回调,排序,future,匿名函数的写法,函数对象,std::function,值捕获,引用捕获,隐式捕获,表达式捕获,auto参数,自动名字,在GDB中理解匿名函数,给匿名函数设置断点

30min


异常处理和noexcept(C++11)

背景,C++异常处理,throw关键字,栈展开,对象展开,noexcept的用途,如果声明了noexcept还抛异常会怎么样,noexcept的性能影响,案例实践

30min


智能指针的智慧(C++11)

问题,ATL和传统解决方法,make_shared,make_unique,std::shared_ptr,,std::unique_ptr,std::weak_ptr传递对象,对象复制,传递引用,案例代码实践,在GDB中理解智能指针

30min


线程库基础(C++11)

多线程编程的跨平台问题问题,C++11的线程库,std::thread,可变参数,在调试器下观察线程的创建和启动过程

30min


同步对象(C++11)

std::mutex,std::unique_lock,std::future,std::packaged_task,std::condition_variable,同步对象,同步对象的性能差异

30min


STL迭代器和自动类型声明(C++11、14)

vector, list, 模板容器的数据布局,stl迭代器,std::begin和std::end,用作循环变量,range-for,用作迭代器,decltype ,auto的其它用法

30min


自动类型识别(C++11、14)

背景,typedef,typeid,使用场景,decltype,decltype(auto),代码示例

30min


共计:5小时


下篇

右值引用和移动语义(C++11)

问题,左值引用和右值引用,移动语义,左值转化为右值,隐式移动,转发,在调试器中观察隐式移动,性能影响

30min


移动语义与性能优化(C++11)

对象复制,隐式复制,隐式复制的性能开销,移动语义的作用

30min


类的特殊方法(C++11)

默认构造函数,析构函数,拷贝构造函数,拷贝赋值运算符,移动构造函数,移动赋值运算符,显示删除,=delete和=default带来的好处,在调试器中观察移动赋值方法的使用

30min


内存对齐(C++11)

内存拓扑,CPU的cache结构,cache line,内存对齐的重要性,数据结构对齐,alignas,动态分配对齐,std::aligned_alloc,DPDK代码分析和实践

30min


空指针的前世今生(C++11)

简史,从NULL到nullptr,nullptr与NULL的区别,使用场景,深层原理,调试时的价值

30min


命名空间(C++11、14、17)

长名字还是段名字,名字冲突,命名空间的解决之道,使用场景,现代C++的扩展,对调试的影响

30min


有常和无常(C++11、14、17、20)

Const的问题,constexpr,constexpr与const的区别,constexpr变量,constexpr函数,constexpr构造函数,常量虚函数,constexpr if-statements,编译和调试

30min


强类型枚举(C++11)

传统枚举类型的问题,强类型枚举的使用方法,:type,在调试器中观察强类型枚举的类型和数据

30min


元组和结构化绑定(C++11、14、17、20)

返回多个值,std::tuple,在调试器中观察多元组,std::tie,用std::tie实现批量赋值,使用std::ignore占位,C++17引入的结构化绑定,绑定到原生数组,绑定到类对象,std::optional,std::nullopt

30min


变参模板(C++11、14、17、20)

背景,C++11的可变参数模板,示例,形参包展开,sizeof...运算符,递归计算,C++17引入的折叠表达式,using声明,C++20的改进

30min


共计:5小时


BACKUP/备选

STL算法库(上)

排序,分区,重排,倒转

30min


STL算法库(下)

集合操作,查找算法,搜索算法,正则表达式, std::regex,std::regex_match,std::match_results,使用场景

30min


函数对象

概念,functor,实质,使用场景,工程应用,STL的函数对象

30min


内存分配器

基本问题,分配器的一般模式,早已有之,STL的内存分配器

30min


属性声明

背景,元数据,__attribute__,标准化,现代C++定义的标准属性,nodiscard

30min


可能和不可能

现代CPU和分支预测,预测失败的惩罚,Linux和GCC的实践,标准化,likely 和unlikely

30min


预处理器

背景,工程需要,非标准化的解决方法,标准化,__has_include

30min


模板编程

问题,泛型,带来的好处,工程上的问题,使用场景,现代C++的支持和优化

30min


线程本地存储

TLS,TLS的传统方法,Windows API,Linux上的实现,thread_local,对操作系统的依赖,编译器实现

30min


多线程调试

GDB的多线程命令,观察线程,针对一组线程执行命令,使用GDB调试多线程死锁和理解同步对象

30min


三向比较运算符(C++20)

他山之石,背景,C++20,返回类型,编译器支持,自动生成的代码,在调试器中观察三向比较运算符

30min


课程对象

已经有C++语言编程基础的软件工程师,或者相关项目的测试工程师、项目带头人和技术经理。


返回上一级