c++11 auto 类型说明符详解

本文详细解析了C++11中auto类型的使用,包括必须有初始值、一条声明语句的一种基本类型、忽略顶层const、引用保留顶层const、不能引用字面值以及&*的声明符特性等关键点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当使用 auto 自动推断类型时,需要注意以下几点:

一、必须要有初始值
一个显而易见的道理,auto 表示编译器根据初始值类型推断声明变量的类型,因此必须要有初始值。

二、一条声明语句只能有一种基本类型

auto i = 0, *p = &i; // 正确,基本类型是int
auto sz = 0, pi = 3.14; // 错误,由sz推断基本类型是int,但pi是double

需要特别注意,第一条语句的 * 是从属于p的,表示p是指针,与基本类型无关,基本类型是int。

三、auto 一般会忽略初始值的顶层const属性
所谓顶层const和底层const,是为了研究指针而引入的说法。顶层const属性是指针自身具有const属性;而底层const属性则是指针特有的,指的是指针指向对象具有的const属性。

一般来说,讨论指针以外的对象时,const属性都是指顶层const。引用类型比较特殊,因为引用本身不是对象,而是另一个对象的别名,因此讨论引用的const属性时一定指的是底层const。

auto i = 0;
	
const int ci = i, &cr = ci; // cr是ci的别名
auto b = ci; b++; // b是int,ci的顶层const属性被忽略
auto c = cr; c++; // c是int,cr(即ci)的顶层const属性被忽略
auto d = &i; (*d)++; // int *
auto e = &ci; // 对常量对象取地址是底层const,所以e是指向常量的指针const int *
const auto f = ci; // 明确指出f具有顶层const

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值