C++学习笔记(一)auto的使用

类型推导 Auto Type

过去:

std::map<int, std::string>::const_iterator itr = q.find(3);

C++11:

auto itr = q.find(3);

使用auto简化迭代器遍历:

for (int i : v) {
    std::cout << i << std::endl;
}

代码简洁了许多。但是,这里每次循环,会对i进行一次拷贝。此处i是一个int值,拷贝不会造成问题,但是如果是一个class,我们就更希望用引用的方式进行遍历,一般写成:

std::vector<string> v = { "a", "b" };

for(auto& s : v) {
    std::cout << s << std::endl;
}

用auto&即可以变成引用方式遍历,甚至还能在循环中改变它的值。也可以使用const auto&,只是一般没有必要。

注意事项:
  • auto 变量必须在定义时初始化,这类似于const关键字;
  • 定义在一个auto序列的变量必须始终推导成同一类型;
  • 如果初始化表达式是引用,则去除引用语义;
  • 如果初始化表达式为const或volatile(或者两者兼有),则除去const/volatile语义;
const int a1 = 10;
auto  b1= a1; //b1的类型为int而非const int(去除const)
const auto c1 = a1;//此时c1的类型为const int
b1 = 100;//合法
c1 = 100;//非法
  • 如果auto关键字带上&号,则不去除const语意;(原实体的引用)
const int a2 = 10;
auto &b2 = a2;//因为auto带上&,故不去除const,b2类型为const int
b2 = 10; //非法
  • 函数或者模板参数不能被声明为auto;
void func(auto a)  //错误
{
//... 
}
  • 时刻要注意auto并不是一个真正的类型。
    auto仅仅是一个占位符,它并不是一个真正的类型,不能使用一些以类型为操作数的操作符,如sizeof或者typeid
cout << sizeof(auto) << endl;//错误
cout << typeid(auto).name() << endl;//错误

转载auto的用法
转载C++11的特性

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值