auto不仅能自动推导类型,而且可以使模板代码更通用。
1. auto
auto a = expr; // expr可以是任意类型,包括T, T*, T* const
auto a* expr; // expr只能是T*,智能指针也不能用
const auto a* = expr; // expr只能是T*,且a保证是const T*
auto a = expr; // a是一个值类型(copy或move)
const auto & a = expr; // a是expr的引用/别名(无copy或move)
auto && a = expr; // a是expr的转发引用,后续用std::foward保持其属性,转发引用会不改变其左/右值属性。
2. 后置类型声明
auto foo(参数) -> 返回值类型
auto与decltype联合使用
3. auto的适用场景
- 类型名重复
- 不关心类型
- 写不出来,如lambda
auto pos = GetPosition();
这里不适合使用auto