c++ 关键字auto使用

转自 https://blog.csdn.net/qq_31930499/article/details/79948906

 

auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型,例如:

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

typeid运算符可以输出变量的类型。程序的运行结果输出了

int

注意:

1.auto的自动类型推断发生在编译期,所以使用auto并不会造成程序运行时效率的降低。

2.auto声明的变量必须要初始化,否则编译器不能判断变量的类型。

3.auto不能被声明为返回值,auto不能作为形参,auto不能被修饰为模板参数。

4.如果初始化表达式是引用,则去除引用语义。

int a = 10;
int &b = a;
 
auto c = b;//c的类型为int而非int&(去除引用)
auto &d = b;//此时d的类型才为int&
 
c = 100;//a =10;
d = 100;//a =100;

5.如果初始化表达式为const或volatile(或者两者兼有),则除去const/volatile语义。但如果auto关键字带上&号,则不去除const语意。

const int a1 = 10;
auto  b1= a1; //b1的类型为int而非const int(去除const)
const auto c1 = a1;//此时c1的类型为const int
b1 = 100;//合法
c1 = 100;//非法


const int a2 = 10;
auto &b2 = a2;//因为auto带上&,故不去除const,b2类型为const int
b2 = 10; //非法

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

int a3[3] = { 1, 2, 3 };
auto b3 = a3;
cout << typeid(b3).name() << endl;

//int *

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

int a7[3] = { 1, 2, 3 };
auto & b7 = a7;
cout << typeid(b7).name() << endl;

//int [3]

8.函数或者模板参数不能被声明为auto

void func(auto a)  //错误
{
//... 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值