现代C++ 教程:高速上手C++11/14/17/20printf 的函数能自然地处理非自带类别的对象。除了在模板参数中能使用 ... 表示不定长模板参数外, 函数参数也使用同样的表示法代表不定长参数,这也就为我们简单编写变长参数函数提供了便捷的手段, 例如: templatevoid printf(const std::string &str, Args... args); 那么我们定义了变长的模板参数,如何对参数进行解包呢? 其次,对参数进行解包,到目前为止还没有一种简单的方法能够处理参数包,但有两种经典的处理 手法: 1. 递归模板函数 26 2.5 模板 第 2 章语言可用性的强化 递归是非常容易想到的一种手段,也是最经典的处理方法。这种方法不断递归地向函数传递模板参 数,进而达到递归遍历所有模板参数的目的: #include template void o。o{0,1} 等价于 o?。注意,在逗号和两个数之 间不能有空格。 有了这两张表,我们通常就能够读懂几乎所有的正则表达式了。 6.2 std::regex 及其相关 对字符串内容进行匹配的最常见手段就是使用正则表达式。可惜在传统 C++ 中正则表达式一直没 有得到语言层面的支持,没有纳入标准库,而 C++ 作为一门高性能语言,在后台服务的开发中,对 URL 资源链接进行判断时,使用正则表达式也是工业界最为成熟的普遍做法。 0 码力 | 83 页 | 2.42 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化编译器优化:代数化简 编译器优化:常量折叠 编译器优化:举个例子 编译器优化:我毕竟不是万能的 结论:尽量避免代码复杂化,避免使用会造 成 new/delete 的容器。 简单的代码,比什么优化手段都强。 造成 new/delete 的容器:我是说,内存分配在堆上的容器 • 存储在堆上(妨碍优化): • vector, map, set, string, function, any • 描述中和老师分享你的思考 那改用 array 试试? 那改用手写的 reduce ? 那改小到 10 ?成功了! 结论:代码过于复杂,涉及的语句数量 过多时,编译器会放弃优化! 简单的代码,比什么优化手段都强。 constexpr :强迫编译器在编译期求值 结论:如果发现编译器放弃了自动优化,可以 用 constexpr 函数迫使编译器进行常量折叠! 不过, constexpr 函数中无法使用非0 码力 | 108 页 | 9.47 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 性能优化之无分支编程 Branchless Programming低效,也可能高效,要测试才知道。 • 抛开性能不谈,从可读性和可维护性上来 说, map 是完胜的,不再需要重复打字 } else if (...) { 了,因此我仍十分推荐用 map 。 不得不分支时可以采取的优化手段: likely 和 unlikely 除了 if-else 分支之外:函数指针也是一种分支,也有预判的开销 • 函数调用相当于无条件跳转指令: jmp label 或者说 call label0 码力 | 47 页 | 8.45 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化blockSize*nblur 改进:只对 X 循环做分块 • 反而变慢了,是怎么回事? • 记得小彭老师说过,性能优化讲究组合拳,光看一 个改动有没有提升是不科学的。 • 所以我们再尝试配合一下其他优化手段,看看有没 有效果吧。 使用预取指令 • 反而更加慢了? • 可能是因为写入了 b 污染了一级缓存,导 致预取效果不好,我们用直写指令试试看 。 使用直写指令 • 反而更加更加慢了?0 码力 | 147 页 | 18.88 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串string 的空基类优化 • 首先映入眼帘的是 _Alloc_hider 这个奇怪的类,包装了一 下首地址指针 _M_p 。为什么要套这一层壳?这其实是为 了防止 allocator 对象浪费空间的优化手段。俗称空基类 优化,问题来了,为什么需要空基类优化? string 的空基类优化 • 如果不优化的话,是会把 allocator 直接作为成员变量放 在 basic_string 里的,但是因为0 码力 | 162 页 | 40.20 MB | 1 年前3
《深入浅出MFC》2/e多采用Motorola 的processor。所以,我对Intel 8086, 8051 系列及Motorola 68000 系列的assembly 语言比较熟悉,而对framework 这样的软件 制造思想和手段一直并不熟悉。近来偶有机会加入一个project,要生成在Win95 下运行的 代码,因此,想尝试一下使用framework 构造软件。很幸运,我找到了您的书。讲VC++ MFC 的书很多,但能 (static 变量) 我希望,每一个类别都能拥有这样一个CRuntimeClass 成员变量,并且最好有一定的命名 规则(例如在类别名称之前冠以"class" 作为它的名称),然后,经由某种手段将整个 类别库构造好之后,「类别型录」能呈现类似这样的风貌: static 变量 第3章 MFC 六大關鍵技術之模擬 125 #define DECLARE_DYNAMIC(class_name) 。 了解这些宏(以及它们背后所代表的机制)的意义,以及隐藏在MFC 类别之中的那 些足以曝露原型机密的「麻烦事儿」,正是我认为掌握MFC 这套Application Framework 的重要手段。 就如同前面那些形而上的定义,MFC 是一组凝聚性强、组织性强的类别库。如果你要利 用MFC 发展你的应用程序,必须同时引用数个必要类别,互相搭配奥援。图5-3 是一 个标准的MFC 程序外0 码力 | 1009 页 | 11.08 MB | 1 年前3
共 6 条
- 1













