【发布时间】:2013-09-16 15:34:23
【问题描述】:
我正在学习 C++ 11 中的decltype。
auto 和decltype 的功能似乎重复了,我不明白为什么我们需要decltype。
根据wiki,它的主要用途是在泛型编程中,通常很难甚至不可能表达依赖于模板参数的类型。
在泛型编程中,难以表达类型时可以使用auto:
template <typename T>
void MakeAnObject (const T& builder)
{
auto val = builder.MakeObject();
// do stuff with val
}
我不明白为什么需要decltype。
decltype 可以做auto 做不到的事情吗?
【问题讨论】:
-
decltype对于auto add(T a, T b) -> decltype(a+b)来说非常有用。 -
如果你不想要一个变量,只想要一个type怎么办?
-
'Do stuff with val' 可能是:
std::vector<decltype(val)> v; /*...*/