《C++标准库》读书笔记/第一天(C++新特性(1))

C++11新特性(1)

  • 以auto完成类型自动推导

auto i=42; //以auto声明的变量,其类型会根据其初值被自动推倒出来,因此一定需要一个初始化操作;

static auto a=0.19;//可以用额外限定符修饰

vector<string> v;  auto pos=v.begin();//如果类型很长或类型表达式复杂 auto很有用;

auto l=[] (int x)->bool{...};//如果类型很长或类型表达式复杂 auto很有用;

  • 一致性初始化

面对任何初始化动作,可以使用相同的动作,也就是使用“{}”。以下皆成立:

int values[] {1,2,3};

std::vector<int> v{2,3,5,7,11,13,17};

std::vector<std::string> cities{"xi'an","shanghai","beijing"};

std::complex<double>c{4.0,3.0};

  • 初值列

初值列会强迫造成所谓value initialization,意思是即使某个local变量属于某种基础类型(那通常会有不明确的初值)也会被初始化为0(或nullptr--如果它是个pointer的话):

int i;//i has undefined value

int j{};//j is initialized by 0

int *p;//p has undefined value

int* q{};//q is initialized by

  • initializer_list

  • 崭新的for循环用法:Range-Based for循环

C++11的for循环支持逐一迭代某个给定的区间、数组、集合内的每一个元素。

for(decl:coll){

statement

}

其中decl是给定集合中的每个元素的声明,coll是给定的集合,针对这些元素,statemet会被执行。

eg1:打印输出一组数

for(int i:{2,3,5,7,9.13,17,19}){

    std::cout<<i<<std::endl;

}

eg2:将vector vec的每个元素elem乘以3

std::vector<double> vec;

...

for(auto& elem:vec){

    elem *=3;

}

  • Move

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值