C++ Templates
文章平均质量分 92
用于记录C++模板技术
loongknown
凡是过往,皆为序章。
展开
-
编译时编程(Compile-Time Programming)
C++ 有很多方式可以实现编译时计算,而模板为编译时计算提供了更多的可能。constexpr本文将介绍这些特性。原创 2022-08-13 10:04:05 · 1878 阅读 · 0 评论 -
值传递还是引用传递(By Value or By Reference)
对于模板实参,选择值传递还是引用传递时一个复杂的问题。虽然通常情况下引用传递的代价更低,但是我们还是建议在没有更好的原因的话,建议使用值传递。下面就值传递和引用传递做一些探讨。...原创 2022-07-30 12:11:40 · 2071 阅读 · 0 评论 -
移动语义(Move Semantics)与 enable_if<>
移动语义(MoveSemantics)无疑是C++11最重要的特性,可以用于优化拷贝和赋值操作。本章将讨论下移动语义对模板设计的影响。原创 2022-07-17 21:34:06 · 2002 阅读 · 3 评论 -
Tricky Basics of C++ Templates
这章将介绍关于模板的一些看起来有点棘手或者诡异的知识点,比如 的其他用途、零初始化、函数模板的字符串字面值参数等等。这些知识点在你常年的模板实践中总会遇到。在模板内部,可以使用关键字 指明一个标识符为一个类型。例如:使用 告诉编译器 是类内定义的一个类型。没有关键字 前缀的话,编译器会将 当作一个没有类型的数据成员,而 会被认为是一个乘法表达式。对于作用域内的内置类型(int,double,pointer,etc.),没有显示进行初始化赋值时,将会产生一个未定义的值。对于模板,如果模板类型原创 2022-07-03 16:51:22 · 2320 阅读 · 0 评论 -
可变参数模板 Variadic Templates
从 C++11 开始,模板可以有任意个模板参数,也即所谓的可变参数模板。定义一个函数 如下,用于接收不同类型的不同参数。 被称为模板参数包(template parameter pack), 被称为函数参数包(function parameter pack)。模板函数 首先打印第一个参数,然后递归调用自己打印剩余参数。为了结束递归,需要提供一个非模板类型重载函数,用于处理最后的空参数包。为了更直观地感受可变参数模板地递归处理过程,可以在以上 中插入 ,打印出函数的调用。当发生 调用时,输出如下:原创 2022-06-26 23:21:27 · 2331 阅读 · 0 评论 -
非类型模板参数 Nontype Template Parameters
除了类型可以作为模板参数,普通值也可以作为模板函数,即非类型模板参数(Nontype Template Parameters)。前一章使用的例子 使用的是标准库中的容器管理元素,也可以使用固定大小的 ,它的优势是内存管理开销更小,数组的大小可以交给用户指定。使用该模板需要同时指定类型和个数。 用于指定 的大小。非类型模板参数也可以有默认值。非类型函数模板参数也可以为函数定义非类型模板参数。也可以指定一个模板参数,由该参数之前的参数推断出其类型。或者保证传值的类型和指定的类型相同。非类型模板原创 2022-06-19 23:26:12 · 3277 阅读 · 0 评论 -
类模板 Class Templates
本系列是对 C++ Templates The Complete Guide Second Edition 的学习和解读。本文介绍类模板。原创 2022-06-18 09:36:01 · 3820 阅读 · 1 评论 -
函数模板 Function Templates
从本文开始,对 [C++ Templates The Complete Guide Second Edition](http://www.tmplbook.com) 进行系统学习和解读。本文介绍函数模板。原创 2022-06-11 12:40:47 · 2356 阅读 · 0 评论