C++11 auto 关键字

本文详细介绍了C++11中的auto关键字及其用法,包括简化变量声明、在模板函数中的应用及返回值类型的推导等内容,并列举了使用auto时需要注意的事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#auto
auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配类型,类似的关键字还有“dectype”(以一个普通的表达式作为参数,auto必须在定义时初始化,必须为同一推导类型
1、代替声明冗长的复杂变量

std::vector<std::string> vec;
for(auto i = vec.begin(), i != vec.end(), ++i)
{……}

2、在定义模板函数时,用于声明依赖模板函数的变量类型

template<_typename _Tx, _typename _Ty>
{
	auto v = x * y;
	std::cout<<v<<endl;
}

3、模板函数依赖模板的返回值

auto multipy(_Tx x, _Ty y)->decltype(x * y)
	return x * y;

当模板函数的返回值依赖于模板的参数时,我们无法在编译代码前确定模板参数的类型,所以无法知道返回值的类型,这时我们可以使用auto,格式如上所示。
decltype操作符用于查询表达式的数据类型,也是C++11标准引入的新的运算符,其目的也是解决泛型编程中有些类型由模板参数决定,而难以表示它的问题。
auto在这里的作用也称为返回值占位,它只是为函数返回值占了一个位置,真正的返回值是后面的decltype(_Tx*_Ty)。为何要将返回值后置呢?如果没有后置,则函数声明时为:

decltype(x*y)multiply(_Tx x, _Ty y)

注意事项:
1、auto a = 10,b = 20,c = ‘a’;此时会出现错误,在初始化时必须统一推导类型
2、若初始化表达式是引用,则去除引用

int a = 10;
int &b = 20;
auto c = b;     //c此时为int型,会去除&
auto &d = b;   //此时d为int&

3、如果初始化表达式为 const 或者 volatile ,同样去除

const int a = 10;
auto b = a;    //此时b类型为int ,const被去除
const auto c = a;//   此时c类型为const int型

若关键字带&则不去除const语义

auto &d = a;  //&只能进行访问不能进行修改a

4、初始化表达式为数组时,auto推到类型为指针

int arr[3] = {1, 2, 3};
auto brr = arr;      //brr 类型为int*

5、表达式为数组,且auto带&时,推导类型为数组

int ar[3] = {1, 2, 3};
auto &br = ar;    //br = ar[3];

6、函数或模板参数不能被声明为auto

void fun(void a)     //error

7、auto并不是一个真正的类型,它仅仅是一个占位符,不能使用一些类型为操作数的操作符,如sizeof或typeid等
如:sizeof(auto)等是错误的用法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值