C++11 auto and Boost.Auto
Consider how you declare an iterator to a vector of strings:
std::vector<std::string> names;
std::vector<std::string>::iterator iter = vec.begin();
The declared type of iter
is big and unwieldy and it is a pain to write it explicitly every time. Given that the compiler knows the type of the initializing expression on the right-hand side, that is, vec.begin()
, this is also superfluous. Starting with C++11, you can use the auto
keyword to ask the compiler to deduce the type of a declared variable using the type of the expression it is initialized with. Thus, the preceding tedium is replaced by the following:
std::vector<std::string> names;
auto iter = vec.begin();
Consider the following statement:
auto var = expr;
The deduced type of var
is the same as the deduced type T
, when the following function template is called with the argument expr
:
template <typename T> void foo(T); foo(expr);
Type deduction rules
There are a few rules to keep in mind...