C++11 auto和decltype

痞子三分冷 提交于 2019-11-26 14:26:28

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;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!