欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

auto && decltype

程序员文章站 2024-03-23 10:31:52
...

关键字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则不会执行,只做分析

相关标签: C++