auto关键字

1.auto不能用来声明,只是一个类型声明的占位符,使用auto声明的变量必须马上初始化,让编译器推断出变量的实际类型,在编译阶段将auto替换成真正类型。

auto x;//error

 

2.auto推导规则:

可以同指针,引用结合起来,还可以带上cv限定符(const和volatile)

1)当不声明为指针或引用时,auto的推导结果会抛弃cv限定符。

example:

int x = 10;

const auto e = x;   // e->const int, auto 为int

auto f = e;   // f->int, 因为f不是引用或指针,auto把const属性抛弃掉,推导成non-const

const auto& g = x;   // g->const int&

auto& h = g;    // h->const int&, 因为h是引用类型,auto不会抛弃掉const属性

 

3.auto的限制:

1)不能用于函数形式参数

2)auto不能用于非静态成员变量(不懂为何)

3)auto无法定义数组

     int arr[10] = {0};

     auto rr[10] = arr;    //error

 

4.合适用auto

1)在返回值类型确定时用auto

2)用于泛型编程:

example:

class Foo

{

public:      static int get() { return 0; }

};

class Bar

{

public:      static const char* get() { return "0"; }

};

template <class A>

void func()

{

      auto val = A::get();

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值