C++学习笔记4--C++11

本文主要是C++11新语法。
包括:

  • variadic templates
  • auto
  • for

variadic templates

可变模板参数将参数分为一个和一包,然后这样递归调用下去。当调用到最后一个42的时候,只剩0个了,这时候调用空的print()函数。

如果想要知道一包有多少函数,可以用sizeof...(args)

auto

之前对于迭代器我们需要写list<string>::iterator ite,但是对于函数find(c.begin(),c.end(),target),编译器能够推出返回值类型,所以可以用auto。

但是不能直接定义auto ite;

ranged-base for

for( decl : coll)
{ statement }

/////////////////////////////
for(auto elem: vec)
{ cout<<elem<<endl;}

for(auto& elem: vec)
{ elem *= 3; }

把冒号后面容器的内容一个一个赋值给decl.当应用的时候,如果对值乘以3,影响的不是原来容器中的内容,而是elem的值。如果要同时改变容器中的值,就要使用引用的方式。

int& r=x; // r代表x,但是这里的实现还是用指针实现的。但是sizeof(r)==sizeof(x) &r == &x这是编译器制造出来的假象。