auto 类型说明符忽略*** const
Posted
技术标签:
【中文标题】auto 类型说明符忽略*** const【英文标题】:auto type specifier ignores top-level const 【发布时间】:2020-10-14 09:48:25 【问题描述】:我在阅读 Lippman 等人的“C++ Primer”时偶然发现了这个问题。 (5/e)
14 int i = 0;
15 const int ci = i, &cr = ci;
16 auto c = cr;
17
18 c = 12; // works fine
我们有这个代码 sn-p。
在第 15 行
const
on ci
是***的,const
on cr
是(一如既往在引用上)是低级的。
页。这本书的69说,
"auto 通常会忽略***常量"
但它忽略了cr
上的低级const
,因为c
的类型为int
(c 的值可以更改为12 而不会编译器抱怨)。
而我希望 c
属于 const int
类型,因为 cr 上有一个低级 const
。
请帮助我理解这一点。
【问题讨论】:
【参考方案1】:考虑顶层,因为它与auto
变量的结果类型相关。如果它是const int
,它将改为int
。
如果它是const int* const
,它将改为const int*
。
【讨论】:
【参考方案2】:简单来说,***const
是应用于对象本身的那个。 int * const
不是const
,它是指向const
的非常量指针,而const int * const
中的***const
使对象本身成为const
。
这些规则旨在有用。删除最上面的const
使auto
适用于此类常见情况:
const int x = 5;
auto y = x;
++y;
通常 C++ 默认为非常量。当您想将y
声明为const
时,您需要指定它。
【讨论】:
以上是关于auto 类型说明符忽略*** const的主要内容,如果未能解决你的问题,请参考以下文章
C++ Primer阅读笔记:const | constexpr | 类型别名 |auto