自动类型推导 decltype
decltype 自动类型推导规则 | |
decltype 应用场景 |
decltype 自动类型推导规则 |
常规:1. 表达式为普通变量或者普通表达式或者类表达式,在这种情况下,使用decltype推导出的类型和表达式的类型是一致的
class A {
public:
string s;
static const int b = 100;
};
auto x = 10;
decltype(x)y = x; // y/x:int
const int& z = x;
decltype(z)w = z; //w:const int &
decltype(A::b)n = 1; //n:const int
A i;
decltype(i.s)m = "hello"; //m:string
2.表达式是函数调用,使用decltype推导出的类型和函数返回值一致
特殊:当表达式是一个左值 或者 被()包围,使用decltype推导出的是该类型的引用
decltype 的应用场景 |
多用于模板中不确定类型的推导
1.容器不确定 --> 迭代器类型的不确定
T()是匿名对象
2.函数的返回值不确定(由于return 的 变量类型不确定)
template<typename T>
??? add(T a,T b)
{
return a+b;
}