第2.10章: auto
什么是 auto?
auto 关键字告诉编译器从初始化器推导对象的类型。
你不必显式写出类型,而是让编译器自行推断。
基础示例
#include <cstddef>
auto a{42zu}; // deduced as ::std::size_t
auto b{3.14}; // deduced as double
auto c{'x'}; // deduced as char
auto d{true}; // deduced as bool
每个对象都用字面量初始化,编译器会自动推导出正确的类型。
为什么使用 auto?
- 当类型从初始化器显而易见时,减少重复书写。
- 类型很长或很复杂时,提升可读性。
- 在大量使用模板的代码中,有助于避免错误。
局限
auto需要初始化器——不能在没有初始化器的情况下声明auto x;。- 推导出的类型未必总符合你的预期(例如窄化转换)。
- 要小心:除非显式添加
&或const&,auto总是按值推导。
配合 auto 的引用
#include <cstddef>
::std::size_t x{100zu};
auto r1{x}; // deduced as ::std::size_t (copy)
auto& r2{x}; // deduced as ::std::size_t& (reference)
auto const& r3{x}; // deduced as ::std::size_t const& (const reference)
添加 & 或 const& 会把推导结果变为引用类型。
要点
auto从初始化器推导对象的类型。- 使用
auto时始终要提供初始化器。 - 用
auto加&或const&来绑定引用。 - 提升可读性并减少重复,尤其是在复杂类型上。