auto
编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型 。然而要做到这一点并非那么容易,有时甚至根本做不到 。为了解决这个问题,C++11 新标准引入了 auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型 。和原来那些只对应一种特定类型的说明符 (比如 )不同,auto 让编译器通过初始值来推算变量的类型 。
显然,auto定义的变量必须有初始值
auto类型推导例子
auto n = 10;//推导出变量 n 的类型是 intauto f = 12.8;//推导出变量 f 的类型是 doubleauto p = &n;//推导出变量 p 的类型是 int*auto name="xiaoxie";//推导出变量 url 的类型是 const char*,也即一个常量指针
在举一个例子
intx = 0;auto *p1 = &x;//p1 为 int *,auto 推导为 intautop2 = &x;//p2 为 int*,auto 推导为 int*auto &r1= x;//r1 为 int&,auto 推导为 intauto r2 = r1;//r2 为int,auto 推导为 int,auto 会把引用抛弃,直接推导出它的原始类型 。
再举一个例子
intx = 0;constauto n = x;//n 为 const int ,auto 被推导为 intauto f = n;//f 为 const int,auto 被推导为 int(const 属性被抛弃)const auto &r1 = x;//r1 为 const int& 类型,auto 被推导为 intauto &r2 = r1;//r1 为 const int& 类型,auto 被推导为 const int 类型
auto的应用
#include
用于泛型编程
#include
和auto功能类似,都是用来在编译时期进行自动类型推导 。
区别:
auto =value;
(exp) =value;
auto是根据等号右边的初始值[value]来推到变量的类型,所以auto要求初始化
是根据括号内表达式[exp]来推到变量的类型,所以不要求初始化
示例
auto i = 1;cout << "type:" << i << "=" << typeid(i).name() << endl;//intdecltype(1.2 + 1) j = 2;cout << "type:" << j << "=" << typeid(j).name() << endl;//double
文章插图
推导规则 1. 如果 exp 是一个不被括号 ( )包围的表达式,或者是一个类成员访问表达式,或者是一个单独的变量,那么 (exp) 的类型就和 exp 一致,这是最普遍最常见的情况 。
2. 如果 exp 是函数调用,那么 (exp) 的类型就和函数返回值的类型一致 。
3. 如果 exp 是一个左值,或者被括号 ( )包围,那么 (exp) 的类型就是 exp 的引用;假设 exp 的类型为 T,那么 (exp) 的类型就是 T& 。
4. 如果上面的条件都不满足,则var的类型与exp的类型相同
下面是一些测试
函数后置返回类型 int func(int x, y);==>auto func(int x, y) -> int;
示例
【泛型编程基础C++之auto、decltype】
#includeusing namespace std;template//auto func(T1 x, T2 y)->decltype(x + y)auto func(T1 x,T2 y){decltype(x + y) tmp = x + y;cout
- 80后零基础转行:数据分析师成为我30岁的职业转折点
- 编程定义一个汽车类Car
- 语c软件排行榜,C语言编程软件
- 数学家丘成桐:学问不可能弯道超车,基础科学是强国梦的根 梦世界之最
- 计算机基础数据结构和算法动态可视化展示网站收录
- 安川机器人之MotoPlus编程
- 女生做什么工作比较有前途 女生零基础可以学什么技术
- 什么叫信任,信任是什么
- 人物素描基础入门,人物素描要怎样入门?
- 抛开粉丝基础,单从音乐角度而言,鹿晗是一个什么地位 鹿晗有吉尼斯记录吗英文