C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理C++17 引入常用数值算法 未来: C++20 引入区间( ranges ) https://zhuanlan.zhihu.com/p/350068132 未来: C++20 引入模块( module ) https://zhuanlan.zhihu.com/p/350136757 未来: C++20 允许函数参数为自动推断( auto ) 未来: C++20 引入协程( coroutine coroutine )和生成器( generator ) 未来: C++20 标准库加入 format 支持 跑远了! • 鉴于 C++20 还没有普遍落地(例如 CMake 不支持 C++20 modules )因此我们的课程 基于 C++17 标准,有时会谈到 C++20 作为扩展阅读。 C++ 有哪些面向对象思想? C++ 思想:封装 比如要表达一个数组,需要:起始地址指针 v ,数组大小 nv 数,除了可以指定全部成员来构造以外, 还可以指定部分的成员,剩余没指定的保 持默认。 • 不过你得保证那个没指定的有在类成员定 义里写明 {} 初始化,否则有可能会变成内 存里的随机值。 • 顺便一提, C++20 中还可以通过指定名称来跳顺序: 编译器默认生成的构造函数:初始化列表(妙用,解决函数多返回值) • 典型的例子包括,图形学某知名应用中, 可以简化函数具有多个返回值的处理。 • 和 std::tuple0 码力 | 96 页 | 16.28 MB | 1 年前3
现代C++ 教程:高速上手C++11/14/17/20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 第 10 章展望:C++20 简介 80 概念与约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 序言 引言 C++ 是一个用户群体相当大的语言。从 C++98 的出现到 C++11 的正式定稿经历了长达十年多之 久的积累。C++14/17 则是作为对 C++11 的重要补充和优化,C++20 则将这门语言领进了现代化的大 门,所有这些新标准中扩充的特性,给 C++ 这门语言注入了新的活力。那些还在坚持使用传统 C++ (本书把 C++98 及其之前的 C++ 特性均称之为传统 C++)而未接触过现代 的对齐要求是 8 或 16。 79 总结 第 10 章展望:C++20 简介 总结 本节介绍的几个特性是从仍未介绍的现代 C++ 新特性里使用频次较靠前的特性了,noexcept 是最 为重要的特性,它的一个功能在于能够阻止异常的扩散传播,有效的让编译器最大限度的优化我们的代 码。 第 10 章展望:C++20 简介 C++20 如同 C++11 一样,似乎能够成为一个振奋人心的更新。例如,早在0 码力 | 83 页 | 2.42 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串业的字符串格式化工 具。 • 想要完整的功能(指定多少进制,左右对齐等),可以用专业的做法: 1. 古代 C 语言的 sprintf 2. 古代 C++ 的 stringstream 3. C++20 新增的 std::format 4. 第三方库提供的 fmt::format ( https://github.com/fmtlib/fmt ) 5. 参考小彭老师在 zeno 里手撸的两个函数(能支持任意 string 也有一个成员函数 compare ,他也是返回 -1 、 1 、 0 表示大小关系。此外, C++20 中引入了 <=> 这个万能比较运 算符,意在取代 compare 成为标准,不过这个更加强类型一点。 • 总之, a == b 和 !a.compare(b) 等价。 C++20 新增: starts_with 和 ends_with • s.starts_with(str) 等价于 cihou_array(FatPtr fptr); • 这就是 rust 炫耀已久的数组胖指针。 C++20 中的 span 也是这个思想。 • 他提倡把 ptr 和 len 这两个逻辑上相关的参数绑在一起,避免程序员犯错。 用胖指针表示字符串 • 其实胖指针的思想既不是 rust 原创的,也不是 C++20 以后才出现的。 • 为了表示动态长度的数组, C++ 中的 vector 和 string0 码力 | 162 页 | 40.20 MB | 1 年前3
openEuler 24.03 LTS 技术白皮书c2x 默认 c17 支持 c2x C++ 标准 默认 c++14 支持 c++17 实验性 C++2a 改进 支持部分 C++20 默认 c++17 实验性 C++2a 改进 支持部分 C++20 默认 c++17 实验性 C++2a 改进 支持部分 C++20 架构新特性 armv8.6-a(bfloat16 extension/Matrix Multiply extension)0 码力 | 45 页 | 6.18 MB | 1 年前3
openEuler 23.09 技术白皮书c2x 默认 c17 支持 c2x C++ 标准 默认 c++14 支持 c++17 实验性 C++2a 改进 支持部分 C++20 默认 c++17 实验性 C++2a 改进 支持部分 C++20 默认 c++17 实验性 C++2a 改进 支持部分 C++20 架构新特性 armv8.6-a (bfloat16 extension/ Matrix Multiply extension)0 码力 | 52 页 | 5.25 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起矩阵库(附带一些常用函数,随机数生成等) 4. Tencent/rapidjson - 单纯的 JSON 库,甚至没依赖 STL (可定制性高,工程美学经典) 5. ericniebler/range-v3 - C++20 ranges 库就是受到他启发(完全是头文件组成) 6. fmtlib/fmt - 格式化库,提供 std::format 的替代品(需要 -DFMT_HEADER_ONLY ) 7. gabime/spdlog fmtlib/fmt - 格式化库,提供 std::format 的替代品 2. gabime/spdlog - 能适配控制台,安卓等多后端的日志库 3. ericniebler/range-v3 - C++20 ranges 库就是受到他启发 4. g-truc/glm - 模仿 GLSL 语法的数学矢量 / 矩阵库 5. abseil/abseil-cpp - 旨在补充标准库没有的常用功能 6.0 码力 | 32 页 | 11.40 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 03 现代 C++ 进阶:模板元编程• 带 auto 参数的 lambda 表达式,和模板 函数一样,同样会有惰性、多次编译的特 性。 C++20 前瞻:函数也可以 auto , lambda 也可以• 如右图,两者的用法可以互换,更方便了 。 • 老师也欢迎同学们在作业中尝试 C++20 新特性,如果你们有相应的编译环境的话 。 • auto wrap(auto f) { • return 0 码力 | 82 页 | 12.15 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化,从而不会生成边界特判的分支 。 假定指针是 16 字节对齐的: assume_aligned 如果能保证指针 a 总是对齐到 16 字节,在 GCC 编译器中这样 写: 但这样不通用,因此 C++20 引入了标准化的 std::assume_aligned : movups 变成了 movaps 对齐的读写可能 带来微乎其微的 性能提升…… 数组求和: reduction 的优化 你看懂了吗?没关系!小彭老师也没看0 码力 | 108 页 | 9.47 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 14 C++ 标准库系列课 - 你所不知道的 set 容器代器基本等效于指针。 • set 也有 begin() 和 end() 函数,他返回的迭代器对象重 载了 * 来访问指向的地址。 迭代器的五大分类 提供的运算符重载 具有此迭代器的容器 相应的 C++20 concept 输入迭代器 * (可读取), != , == , ++ (一次 性) istream_iterator input_iterator 输出迭代器 * (可写入), != ,0 码力 | 83 页 | 10.23 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程程还是有点麻烦,我们可以自定义一个类 ThreadPool ,并用他创建一个全局变量, 其解构函数会在 main 退出后自动调用。 std::jthread :符合 RAII 思想,解构时自动 join() • C++20 引入了 std::jthread 类,和 std::thread 不同在于:他的解构函数里会 自动调用 join() 函数,从而保证 pool 解 构时会自动等待全部线程执行完毕。 小彭老师快乐吐槽时间0 码力 | 79 页 | 14.11 MB | 1 年前3
共 11 条
- 1
- 2













