如何解决自动类型说明符忽略顶级const
我在阅读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
我们有此代码段。
第15行中的
const
上的ci
是顶级,const
上的cr
是低级别。
Pg。这本书的第69条说,
“自动通常忽略顶级const”
但是它忽略了const
上的低级cr
,因为c
的类型为int
(c的值可以更改为12,而不会引起编译器的抱怨)。
我希望c
的类型为const int
,因为cr上有一个较低级别的const
。
请帮助我理解这一点。
解决方法
请考虑与auto
变量的结果类型相关的顶层。如果将是const int
,它将是int
。
如果原本是const int* const
,它将改为const int*
。
简单来说,顶层const
是应用于对象本身的顶层。 int * const
不是const
,它是指向const
的非常量指针,而const
中的顶级const int * const
则使对象本身{ {1}}。
规则被设计为有用的。删除最顶部的const
可使const
在以下常见情况下适用:
auto
通常,C ++默认为非常量。要将const int x = 5;
auto y = x;
++y;
声明为y
时,需要指定它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。