1.C++11 auto
在C++98中,auto的用法为变量为自动变量,拥有自动的生命周期。但显然,变量默认都是有自动生命周期的。
在C++11中,auto的用法为:推断变量的类型。
举例如下:
int i = 1;
auto j = i;
在该例子中,auto让变量的类型不直接获得而是推断得知。
从C++语言角度来讲,C++是强类型语言,必须确定变量的类型。而python等弱类型语言,不直接确定变量类型,而是确定让变量在运行时确定类型。C++ 11显然是借鉴了这个特性。但从另一方面讲,auto变量是不是违反了C++强类型语言的特点,值得商榷。
auto变量,可以让代码看起来简化,但运行效率,显然会变低。
2.C++11 decltype
decltype,用于检查变量的类型,从而让变量类型确定。
举例如下:
struct A { double x; };
const A* a;
decltype(a->x) y; // y 的类型是 double(其声明类型)
decltype((a->x)) z = y; // z 的类型是 const double&(左值表达式)
3.样例
# include <vector>
# include <iostream>
template<class T1,class T2>
void add(T1 v1,T2 v2)
{
decltype(v1*v2) res; //res的类型将根据v1,v2的类型而推断
res=v1+v2;
std::cout<<res<<std::endl;
}
int main()
{
std::vector<int> vec{1, 2, 3, 4, 5};
//auto p=vec.begin()等效于vector<int>::iterator p=vec.begin();
for(auto p=vec.begin(); p!=vec.end(); p++)
{
std::cout<<*p<<std::endl;//1 2 3 4 5
}
add(1, 3.14);
return 0;
}
来源:https://blog.csdn.net/wangzhezhilu001/article/details/98880498