auto: 使用范围仅限于初始化,分别是赋值初始化和花括号初始化

  1. auto tmpA = 10 * 20; // int
  2. auto tmpB { 0 }; // int
  3. auto tmpC = &tmpA; // int *
  4. auto tmpD{ &tmpB }; // int *

注意: 在C++标准里,类的成员变量不允许使用自动类型推导机制

  1. class MyClass
  2. {
  3. public:
  4. explicit MyClass();
  5. ~MyClass();
  6. public:
  7. bool testOutput();
  8. private:
  9. auto m_index = 0; // 编译报错
  10. mutable int m_count { 0 };
  11. };

auto推导的类型都是值类型,而不是引用

auto可以加上const,volatile, *, &等修饰符,得到新的类型。

  1. auto tmpA = 10; // auto推导为int, tmpA类型:int
  2. auto& tmpB = tmpA; // auto推导为int, tmpB类型:int&
  3. auto* tmpC = &tmpA; // auto推导为int, tmpC类型:int*
  4. const auto& tmpD = tmpA; // auto推导为int, tmpD类型:const int&
  5. auto tmpE = &tmpD; // auto推导为const int*, tmpE类型:const int*