主要参考:c++11新特性–decltype
返回值 decltype(表达式)
[返回值的类型是表达式参数的类型]
看一些例子:
template <class U, class V>
auto Somefunction(U u, V v) -> decltype(u*v)
{
result = u*v;//now what type would be the result???
decltype(u*v) result = u*v;//Hmm .... we got what we want
return result;
}
在下面的一个段落我将会让你熟悉这个观念用 auto 和 decltype 来声明模板函数的返回值,其类型依靠模板参数。
- 如果这个表达式是个函数,decltype 给出的类型为函数返回值的类型。
int add(int i, int j) { return i+j; }
decltype(add(5, 6)) var = 5;//var is int
- 非常重要的标记一下,decltype 不会执行表达式而auto会,他仅仅推论一下表达式的类型。
int fun() {}
decltype(fun()) x;//x is int ,and fun() will not run