C++ 中 auto 和顶/底层常量的问题

发布于 2022-09-02 13:31:41 字数 226 浏览 16 评论 0

C++ Primer 第5版中,关于 auto 让我有点疑问:

里边说

auto 通常会忽略掉顶层的 const,底层 const 则会保留下来。因此,设置一个类型为 auto 的引用时,初始值中的顶层常量属性仍然保留。但仍然要注意,如果初始值已经绑定了引用,则此常量就不是顶层常量了。

这里的顶层常量和底层常量有哪些区别,导致了这样的说法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

玉环 2022-09-09 13:31:41

简单的说就是:
指针能不能改变,是顶层const;
指针指向的东西能不能改变,是底层const。
一般在类型推导的过程中,顶层的const都会被忽略,而底层const被保留。
允许将顶层const变量赋值给非顶层const变量,但底层const不同的话,就不行。底层const不同相当于类型不同。

沫离伤花 2022-09-09 13:31:41
1L的回答是错的
刚好说反了,您可以参考一下c++ primer第57页的内容。顶层const表示指针本身是个常量,即int *const p,而底层const则指的是指针或者引用的对象是常量,即const int*p
长梦不多时 2022-09-09 13:31:41
int i = 10;
int j = 5;
const int *p1 = &i;
int * const p2 = &i;
*p1 = 10; // illegal
p1 = &j;   // legal
*p2 = 7;   // legal
p2 = &j;   // illegal
温馨耳语 2022-09-09 13:31:41

你看看const章节的内容就知道了。顶层常量是指内容不允许被修改的常量,比如const int* p; p是一个整型指针,它所指向的整型变量的指不能被修改。const修饰符是右结合,所以这里的const修饰int,表明内容不能修改。
底层常量是指值能被修改,但地址不能被修改的常量。比如int* const p; const右边是指针,所以该语句定义了一个不能指向其他内存区域的指针,但该内存区域的值是可以被修改的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文