news 2026/7/15 4:23:14

C++11中auto类型说明符

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++11中auto类型说明符

随着程序越来越复杂,有时侯根本搞不清到底需要的类型是什么,程序员不得不回过头去从程序的上下文中寻求帮助。但 auto类型说明符能让编译器通过初始值来推算变量的类型。显然,auto定义的变量必须有初始值。

使用auto也能在一条语句中声明多个变量。因为一条声明语句只能有一个基本数据类型,所以该语句中所有变量的初始基本数据类型都必须一样:

auto i = 0, *p = &i; //i是整数,p是整型指针

特别的,当引用被用作初始值时,真正参与初始化的其实是引用对象的值,因为使用引用其实是使用引用的对象。此时编译器以引用对象的类型作为auto的类型:

int i =0, &r = i; auto a = r; //a是一个整数(r是i的别名,而i是一个整数)

其次,auto一般会忽略掉顶层const,同时底层const则会保留下来:

const int ci=i, &cr=ci; auto b=ci; //int变量(ci的顶层const被忽略) auto c=cr; //int变量 auto d=&i; //指向int变量的指针 auto e=&ci; //指向int常量的指针(对常量对象取地址是一种底层const) auto &g=ci; //int型常量引用

先简单介绍一下常量引用:

auto &g=ci; auto &h=42; //非法,不能为非常量引用绑定字面值 const auto &j=42 //合法,可以为常量引用绑定字面值

常量引用的const是底层const,其引用的对象值为常量。

为什么写 auto &g = ci; 推导之后const却留下来了?

答:顶层const只有拷贝初始化的时候才会被auto丢弃:

auto k = ci; // 拷贝语义:复制ci的值生成独立新变量k,顶层const作用对象只是旧变量ci, //所以k不需要继承这个const,k的类型为int

而 auto &g = ci; 是引用绑定,并非拷贝:

引用不会复制出新数据,g直接绑定ci对应的那块内存。此时限制“这块内存的值不能改动”的const,身份发生了视角切换:

  • 站在 ci 本身的角度:const约束ci自己,属于顶层const;
  • 站在引用g的视角:g访问的是下层被绑定的数据,这个const就转变为底层const,用来约束引用指向的内容不可修改。

auto推导引用的时候会保留底层const,因此最终 g 得到 const int& 。

如果希望推断出的auto类型是一个顶层const,需要明确指出:

const auto f = ci; //int常量

切记,符号&和*只从属于某个声明符,而非基本数据类型的一部分,因此初始值必须是同一个类型:

auto k=ci,&l=i; //k是整数,l是整数引用 auto &m=ci,*p=&ci; //m是对整型常量的引用,p是指向整型常量的指针 auto &n=i,*p2=&ci; //非法 i的类型是int,而&ci的类型是const int
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 4:22:14

QT 知:官方文档导航与高效阅读指南

1. 为什么官方文档是Qt开发者的最佳选择 每次在搜索引擎里输入Qt相关问题,总会弹出各种博客、论坛帖子和第三方教程。这些内容往往存在几个致命问题:版本过时、理解片面、逻辑混乱。我刚开始学Qt时也踩过这些坑——照着某篇教程写代码,结果发…

作者头像 李华
网站建设 2026/7/15 4:21:24

springboot大学生租房管理系统---附源码19543

源码获取 私信联系我即可~ 大家点赞、收藏、关注、评论啦 精彩专栏推荐订阅:在下方专栏👇🏻 👇🏻 精彩专栏 推荐订阅👇🏻 java精品项目案例【3000套】 java精品项目案例【3000套】https://blog…

作者头像 李华
网站建设 2026/7/15 4:20:14

FIBF与SE37实战:BTE增强在会计凭证过账前的数据捕获与分流

1. BTE增强技术入门:会计凭证处理的隐形抓手第一次接触BTE增强是在五年前的一个财务系统优化项目上。当时客户要求在会计凭证过账前自动检查特定科目的辅助核算完整性,传统用户出口无法满足需求。折腾了两周后,我在SAP的底层代码中发现了&quo…

作者头像 李华
网站建设 2026/7/15 4:19:22

Android逆向:Xposed框架实战——从模块开发到方法Hook的完整指南

文章目录 每日一句正能量 一、引言:Xposed框架在Android逆向中的核心地位 二、Xposed框架架构与Hook原理 2.1 核心架构 2.2 方法Hook执行流程 2.3 Xposed框架演进 三、LSPosed环境搭建与配置 3.1 前置条件 3.2 安装LSPosed 3.3 LSPatch免Root方案(替代方案) 四、Xposed模块开…

作者头像 李华
网站建设 2026/7/15 4:17:55

微信小程序下拉刷新:从基础配置到高级自定义动画实战

1. 微信小程序下拉刷新基础配置下拉刷新是移动端常见的交互方式,微信小程序提供了两种开启方式:全局配置和页面级配置。全局配置会影响所有页面,适合需要统一风格的场景;页面级配置则更灵活,可以针对特定页面单独设置。…

作者头像 李华