C++ auto关键字

文章目录

  • 一、auto的推导规则
  • 二、auto的限制

C++11 中有:auto 类型推导

auto x = 5; // OK: x 是 int 类型
auto pi = new auto(1); // OK: pi 被推导为 int*
const auto *v = &x, u = 6; // OK: v是const int*类型,u是const int类型
static auto y = 0.0; //OK: y是double类型
auto int r; //error: auto不再表示存储类型指示符
auto s; //error: auto无法推导出s的类型

一、auto的推导规则

从示例中可以看到auto的一些使用方法。它可以同指针、引用结合起来使用,还可以带上cv限定符(cv-qualifier,const和volatile限定符的统称)

auto * a = &x;  // a -> int*,auto被推导为int
auto   b = &x;  // b -> int*,auto被推导为int*
auto & c = x;  	// c -> int&,auto被推导为int
auto   d = c;   // d -> int ,auto被推导为int
const auto e = x; // e -> const int
auto f = e;  // f -> int
const auto& g = x; // e -> const int&
auto& h = g;// f -> const int&
  • a和c的推导结果是很显然的,auto在编译时被替换为int,因此a和c分别被推导为int*和int&
  • b的推导结果说明,其实auto不声明为指针,也可以推导出指针类型
  • d的推导结果说明当表达式是一个引用类型时,auto会把引用类型抛弃,直接推导成原始类型int
  • e的推导结果说明,const auto会在编译时被替换为const int
  • f的推导结果说明,当表达式带有cons(t实际上volatile也会得到同样的结果)属性时,auto会把const属性抛弃掉,推导成non-const类型int
  • g、h的推导说明,当auto和引用(换成指针在这里也将得到同样的结果)结合时,auto的推导将保留表达式的const属性

通过上面的一系列示例,可以得到下面这两条规则:
1)当不声明为指针或引用时,auto的推导结果和初始化表达式抛弃引用和cv限定符后类型一致
2)当声明为指针或引用时,auto的推导结果将保持初始化表达式的cv属性

二、auto的限制

  1. auto是不能用于函数参数
  2. auto不能用于非静态成员变量
  3. auto无法定义数组
  4. auto无法推导出模板参数

推荐一个零声学院免费教程,个人觉得老师讲得不错,
分享给大家:
C++初级课程链接:
https://ke.qq.com/cozurse/444655?flowToken=1043280
Qt课程链接:
https://ke.qq.com/course/444655?flowToken=1044614

你可能感兴趣的:(C++学习,c++,开发语言)