auto && decltype

关键字auto
1.C++03之前,auto放在变量声明之前,声明变量的存储策略,但通常省略不写
2.C++11中,auto关键字放在变量之前,作用是在声明变量的时候根据变量值的类型自动为此变量选择匹配的类型
e.g:

int a = 10;
auto au_a = a;		//自动推断au_a为int型
cout << typeid(au_a).name() << endl;

3.auto使用限制
3.1. auto变量必须在定义时初始化,类似于const

auto a1 = 10;
auto b1;	//error
bi = 10;

3.2. 定义在一个auto序列的变量必须推导称同一类型

auto a2 = 10, a3{20};
auto b2{10}, b3=20.0		//error

3.3. 如果初始化表达式是引用或const,则去除引用或const语义

int a{10};
int &b = a;
auto c = b;		//c的类型为int not int&(去除引用)
const int a1{10};
auto b1 = a1;	//b1的类型为int not const int

3.4. 如果auto关键字带&,则不去除引用或const语义

int a = 10;
int &b = a;
auto& d = b;	//d的类型为int&
const int a2 = 10;
auto& b2 = a2;	//b2的类型为const int

3.5. 初始化表达式为数组时,auto关键字推导类型为指针

int a3[3] = {1,2,3};
auto b3 = a3;
cout << typeid(b3).name() << endl;	//输出int*(与编译器有关)

3.6. 若表达式为数组且带上&,则推导类型为数组类型

int a4[3] = {1,2,3};
auto& b4 = a4;
cout << typeid(b4).name() << endl; //输出int[3]

3.7. C++14中,auto 可以作为函数的返回值类型和参数类型

decltype关键字
用法
利用已知类型声明新变量
decltype是在编译期推导一个表达式的类型,它只做静态分析,因此它不会导致已知类型表达式执行。
decltype 主要用于泛型编程(模板)
e.g:

int fun1() {
	return 10;
}
auto fun2() {
	return 'a';
}
int main()
{
	decltype(fun1()) x;		//不会执行fun1()
	decltype(fun2()) y;
	return 0;
}

对解引用操作,auto会推断出原有类型,decltype推断出引用;并且auto推断是会世纪执行,decltype则不会执行,只做分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值