• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C++ auto关键字

武飞扬头像
苍天饶过谁?
帮助1

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiagiei
系列文章
更多 icon
同类精品
更多 icon
继续加载