一 auto/decltype:自动推导类型
之前的C++标准库里面,必须显示指定变量的类型,然而随着模板类型的出现,某些东西的类型,尤其是函数参数的返回值不是那么容易表示。在这种情况下,将中间结果存储在某个变量中是件很困难的事,要去了解模板的内部结构。
c++11提供以下方式两种来缓解上述问题
1.定义有显示初始化变量可以用auto来自动确定变量类型
2.decltype可以用来在编译期间确定表达式的类型
auto:用法示例:
#include<vector>
int main()
{
int a = 10;
auto b = a;
//使用场景
//之前的写法
vector<int> v1 = { 1, 2, 3, 4 };
vector<int>::iterator it = v1.begin();
for (it = v1.begin(); it != v1.end(); ++it)
{
if (*it == 2)
{
cout << "存在"<<endl;
}
}
//有了auto之后的写法
auto it1 = v1.begin();
for (it1 = v1.begin(); it1 != v1.end(); ++it1)
{
if (*it1 == 2)
{
cout << "存在"<<endl;
}
}
system("pause");
return 0;
}
decltype用法示例:
int a;
decltype (a)b = 5;
cout << b;
二 基于范围的for循环
在以前的C++版本中,要遍历一个容器的元素需要很多代码,而c++11推出基于范围的for循环,它会遍历列表中的每一个元素。
可用于数组,能用迭代器遍历的容器。(通常和auto搭配使用)
int myarray[5] = { 1, 2, 3, 4, 5 };
for (int& x : myarray)
{
x *= 2;
}
for (int x : myarray)
{
cout << x;
}