C++11的模板改进
C++11关于模板有一些细节的改进:
模板的右尖括号
模板的别名
函数模板的默认模板参数
模板的右尖括号
C++11之前是不允许两个右尖括号出现的,会被认为是右移操作符,所以需要中间加个空格进行分割,避免发生编译错误。
int main() {std::vector<std::vector> a; // error std::vector<std::vector> b; // ok
}
这个我之前都不知道,我开始学编程的时候就已经是C++11的时代啦。
模板的别名
C++11引入了using,可以轻松的定义别名,而不是使用繁琐的typedef。
typedef std::vector<std::vector> vvi; // before c++11
using vvi = std::vector<std::vector>; // c++11
使用using明显简洁并且易读,大家可能之前也见过使用typedef定义函数指针之类的操作,那烂代码我就不列出来了,反正我是看不懂也不想看...以后都可以使用using,额还是列出来吧。
typedef void (*func)(int, int); // 啥玩意,看不懂
using func = void (*)(int, int); // 起码比typedef容易看的懂吧
上面的代码使用using起码比typedef容易看的懂一些吧,但是我还是看不懂,因为我从来不用这种来表示函数指针,用std::function()、std::bind()、std::placeholder()、lambda表达式它不香吗。
函数模板的默认模板参数
C++11之前只有类模板支持默认模板参数,函数模板是不支持默认模板参数的,C++11后都支持。
templateint>class A { T value; };
templateint, typename U> // errorclass A { T value; };
类模板的默认模板参数必须从右往左定义,而函数模板则没有这个限制。
template <typename R, typename U=int>R func1(U val) { return val;}
template <typename R=int, typename U>R func2(U val) { return val;}
int main() { cout << func1<int, double>(99.9) << endl; // 99 cout << func1<double, double>(99.9) << endl; // 99.9 cout << func1<double>(99.9) << endl; // 99.9 cout << func1<int>(99.9) << endl; // 99 cout << func2<int, double>(99.9) << endl; // 99 cout << func1<double, double>(99.9) << endl; // 99.9 cout << func2<double>(99.9) << endl; // 99.9 cout << func2<int>(99.9) << endl; // 99 return 0;}
对于函数模板,参数的填充顺序是从左到右的。
声明:
本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
C++11的模板改进相关推荐
- [C++11]对模板右尖括号的优化
在泛型编程中,模板实例化有一个非常繁琐的地方,那就是连续的两个右尖括号(>>)会被编译器解析成右移操作符,而不是模板参数表的结束. C++11改进了编译器的解析规则,尽可能地将多个右尖号( ...
- C++11 变参模板
文章目录 1.概述 2.可变模版参数的展开 2.1变参函数模版 2.1.1递归函数方式展开参数包 2.1.2逗号表达式展开参数包 2.2变参类模版 2.2.1偏特化与递归方式展开 2.2.2继承方式展 ...
- c++11 之模板定义别名(using)
C++11标准中可以为模板定义别名,比如 template<typename T> using ptr=std::shared_ptr<T>; //这里模板定义ptr<T ...
- [C++11]函数模板的默认模板参数
在C++11中添加了对函数模板默认参数的支持. 代码如下: #include<iostream> using namespace std;template<typename T = ...
- C++11 函数模板的默认模板参数
1.函数模板默认模板参数简介 函数模板与类模板在 C++98 一起被引入,因种种原因,类模板可以拥有默认模板参数,而函数模板不可以.从 C++11 开始,这个限制被解除了,即函数模板同样可以拥有默认模 ...
- C++11标准模板(STL)- 算法(std::set_symmetric_difference)
定义于头文件 <algorithm> 算法库提供大量用途的函数(例如查找.排序.计数.操作),它们在元素范围上操作.注意范围定义为 [first, last) ,其中 last 指代要查询 ...
- C++11标准模板(STL)- 算法(std::nth_element)
定义于头文件 <algorithm> 算法库提供大量用途的函数(例如查找.排序.计数.操作),它们在元素范围上操作.注意范围定义为 [first, last) ,其中 last 指代要查询 ...
- xbmc_屏幕快照之旅:XBMC 11 Eden Rocks改进了iOS支持,AirPlay甚至是自定义XBMC OS
xbmc XBMC, the wildly popular, free, and robust open-source media center suite, has a new version. X ...
- C++11标准模板(STL)- 算法 - 集合操作(在已排序范围上)(std::set_difference)
定义于头文件 <algorithm> 算法库提供大量用途的函数(例如查找.排序.计数.操作),它们在元素范围上操作.注意范围定义为 [first, last) ,其中 last 指代要查询 ...
最新文章
- [03]常用正则表达式
- outdated: 17.2D Texture Font
- [Eclipse]代码已被写入关于如何切换到unix在新行
- python average函数详解_python 函数详解
- 谷歌看下!罗永浩谈谷歌砍掉平板线 :主要是因为软件太烂
- ReentrantLock源码解读
- 大一入门oj题目——《三天以后》
- 爬取贝壳网深圳二手房实战
- 机器学习算法——支持向量机SVM4(SMO算法及KTT条件)
- C语言:va_list
- 三种编码器技术详解:各有利弊,如何选择?
- 导入三方库是出现NotFount
- PyTorch学习率衰减策略:指数衰减(ExponentialLR)、固定步长衰减(StepLR)、多步长衰减(MultiStepLR)、余弦退火衰减(CosineAnnealingLR)
- 什么是事件驱动架构(EDA)? 一个会写诗的程序员
- 屏蔽各类弹窗广告(WPS、智能云输入法)
- 我是怎么解决微信封了我们域名的
- 空白符号筛选测试真正能用的空白格符号直接复制即可
- 如何优雅的关闭Java线程池
- 新疆自考大专计算机应用专业,新疆高等教育自学考试专业目录
- 维拉智能管家机器人_维拉智能机器人