C++14学习笔记(5)——变量模板
来源:互联网 发布:单片机里cpu 编辑:程序博客网 时间:2024/05/22 11:32
模板是C++实现元编程的重要手段,C++的模板有类模板、函数模板,在C++11中引入了类型别名模板。而在C++14中,引入了一种称为变量模板的新的模板类型。
以一段代码为例:
//代码5.1#include <iostream>#include <string>using namespace std;template <typename T>T var;//声明变量模板void assign()//为模板的相应变量赋值{var<int> = 7;var<double> = 3.14;var<char> = '$';var<string> = "这是一个字符串";}void get_address()//获取模板的相应变量的地址{int* pi = &var<int>;double* pd = &var<double>;char* pc = &var<char>;string* ps = &var<string>;cout << pi << " " << pd << " " << static_cast<void*>(pc) << " " << ps << endl;}void output()//输出模板的相应变量{cout << var<int> << endl << var<double> << endl << var<char> << endl << var<string> << endl;}int main(){get_address();output();assign();get_address();output();return 0;}
某一次的运行结果为:
013912E0 013912E8 013912F1 013912F4
0
0
0
0
013912E0 013912E8 013912F1 013912F4
7
3.14
$
这是一个字符串
结果分析:
这段代码使用template <typenameT> T var;语句声明了一个(全局的)变量模板,并在assign函数中进行了赋值。由get_address的输出结果可知,var变量模板的四个实例var<int>, var<double>, var<char>, var<string>的地址不同,说明它们是四个不同的变量。使用变量模板的好处和使用函数模板一样,对于需要重复定义用途类似,但类型不同的变量,可以减少重复代码量,不必重复定义形如var_int, var_double...之类的变量。
VC2015要求变量模板必须为全局变量,理论上来说应该可以在全局区对变量模板赋值,但VC2015中对变量模板的赋值不能在全局区域:
//代码5.2//这段代码放在全局区域template <typename T>T var;//在VC2015中报错:缺少类型说明符var<float> = 5.3f;
编译器给的报错很奇怪,似乎编译器并没有认为var<float>是一个变量模板的实例化变量,但是在函数体内的赋值确是正确的。
0 0
- C++14学习笔记(5)——变量模板
- C++ Template学习笔记之函数模板(5)——模板编译模式
- C++ Template学习笔记之函数模板(5)——模板编译模式
- 【C++】学习笔记四十三——函数模板
- Objective-C学习笔记(十六)——成员变量
- 【C++】学习笔记四十——引用变量
- [转]C++ Template学习笔记之函数模板(5)——模板编译模式
- C++ Template学习笔记之函数模板(1)——函数模板定义
- C++ Template学习笔记之函数模板(3)——模板实参推演
- C++ Template学习笔记之函数模板(7)——重载函数模板
- C++ Template学习笔记之函数模板(1)——函数模板定义
- C++ Template学习笔记之函数模板(3)——模板实参推演
- C++ Template学习笔记之函数模板(7)——重载函数模板
- Java学习笔记5 —— 变量
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十章 变量和数据类型
- Objective-C学习笔记(二十四)——成员变量的访问修饰符学习
- Objective-C学习笔记(二十六)——成员变量的继承学习
- C++ Template学习笔记之函数模板(2)——函数模板实例化
- 深度学习-读csv数据做分类器
- 关于栈的应用-括号匹配问题的两种解题思路
- 基于SpringMVC+Spring+Hibernate+Maven+Bootstrap的简单Demo
- JavaScript实现网页元素的拖拽效果
- excel表格项等于另外一个表各项,并且空表项不显示0
- C++14学习笔记(5)——变量模板
- 为什么用docker
- iOS百度地图的基本使用
- 枚举 enum 总结
- Java并发系列-13、死锁
- CAP原则(CAP定理)
- jQuery回车键触发操作
- demo4j生成字符串xml和解析xml
- C语言编程中常见的漏洞原因