- auto:在编译时期确定待定义的变量类型;decltype:在编译时期推导一个表达式(不一定要定义)的类型(在满足auto功能的基础上)
- 应用场景:多用在泛型编程应用中(stl,模板等)
- typeDerivate.hpp
#ifndef _TYPEDERIVATE_H__
#define _TYPEDERIVATE_H__
#include "stdafx.h"
#include <vector>
class CTypeDerivate
{
public:
void Func()
{
std::vector<int> vecData = { 1, 2, 3, 6, 7 };
for (auto iter = vecData.begin(); iter != vecData.end(); iter++)
{
printf("%d ", *iter);
}
}
template<typename T, typename U>
auto Add(T t, U u)->decltype(t + u)
{
return t + u;
}
public:
CTypeDerivate() = default;
~CTypeDerivate() = default;
};
#endif /*_TYPEDERIVATE_H__*/
- 优点:简化代码,隐藏用户不关心的变量类型
std::vector<int>::iterator iter = vecData.begin();
auto iter = vecData.begin();
- 优点:类型擦除
template<typename T, typename U>
auto Add(T t, U u)->decltype(t + u)
{
return t + u;
}
- 调用实例
#include "stdafx.h"
#include "TypeDerivate.hpp"
int _tmain(int argc, _TCHAR* argv[])
{
CTypeDerivate objTypeDerivate;
objTypeDerivate.Func();
auto data1 = objTypeDerivate.Add(3, 3);//data1为int
auto data2 = objTypeDerivate.Add(3, 2.1);//data2为float
printf("\n %d %f \n", data1, data2);
decltype(data1 + data2) data3 = 3;//data3为float
return 0;
}