I am learning decltype
in C++ 11.
The function of auto
and decltype
seems duplicated and I don't understand why we need decltype
.
According to wiki, Its primary intended use is in generic programming, where it is often difficult, or even impossible, to express types that depend on template parameters.
In generic programming, I can use auto
when it is difficult to express types:
template <typename T>
void MakeAnObject (const T& builder)
{
auto val = builder.MakeObject();
// do stuff with val
}
I don't understand why decltype
is required.
Can decltype
do something which auto
can not?
auto
means "the variable's type is deduced from the initialiser."
decltype
refers to a type in an arbitrary context.
Here's an example where you can't use auto
:
template <typename T, typename U, typename V>
void madd(const T &t, const U &u, const V &v, decltype(t * u + v) &res)
{
res = t * u + v;
}
There is no initialiser in the parameter declaration (and there can't be), so you can't use auto
there.
The thing is, 99% of uses for decltype
is in templates. There's no equivalent functionality for it there. In non-template code, auto
is usually what you want to use.