The decltype
keyword in C++11 is used to deduce the type of an expression at compile time. It allows you to declare variables or functions with a type that matches the type of a given expression, without explicitly knowing the type.
How it works
When the compiler encounters decltype(expr)
, it evaluates the type of the expression expr
and substitutes it as the result. This feature is especially useful in scenarios involving templates, complex return types, or where type inference is needed.
Example
int x = 42;
decltype(x) y = 10; // 'y' has the same type as 'x', which is 'int'
Here, decltype(x)
evaluates to int
, so y
is declared as an int
.
Another example involves auto-deduction in functions:
template <typename T1, typename T2>
auto add(T1 a, T2 b) -> decltype(a + b) {
return a + b;
}
In this function, decltype(a + b)
determines the return type based on the types of a
and b
during compilation.
Advantages of decltype
- Type Safety: It ensures variables or return types match exactly the intended expression’s type.
- Simplifies Templates: It removes the guesswork when deducing complex types.
- Works with
auto
: Whileauto
infers a variable’s type when it’s declared,decltype
can infer the type of an arbitrary expression, making it more flexible.