auto类型推导
int x = 0;
auto &r1 = x;
auto r2 = r1; //r2 为 int,auto 推导为 int
- 第 3 行代码是需要重点说明的,r1 本来是 int& 类型,但是 auto 却被推导为 int 类型,这表明当
= 右边的表达式是一个引用类型时,auto 会把引用抛弃,直接推导出它的原始类型。
int x = 0;
const auto n = x;
auto f = n; //f 为 int,auto 被推导为 int(const 属性被抛弃)
const auto &r1 = x;
auto &r2 = r1; //r1 为 const int& 类型,auto 被推导为 const int 类型
- 第 3 行代码中,n 为 const int 类型,但是 auto 却被推导为 int 类型,这说明当
= 右边的表达式带有 const 属性时, auto 不会使用 const 属性,而是直接推导出 non-const 类型。 - 第 5 行代码中,r1 是 const int & 类型,auto 也被推导为 const int 类型,这说明当 const 和引用结合时,auto 的推导将保留表达式的 const 类型。
最后我们来简单总结一下 auto 与 const 结合的用法:
- 当类型不为引用时,auto 的推导结果将不保留表达式的 const 属性;
- 当类型为引用时,auto 的推导结果将保留表达式的 const 属性。
|