C++ Primer 第5版中,关于 auto 让我有点疑问:
里边说
auto 通常会忽略掉顶层的 const,底层 const 则会保留下来。因此,设置一个类型为 auto 的引用时,初始值中的顶层常量属性仍然保留。但仍然要注意,如果初始值已经绑定了引用,则此常量就不是顶层常量了。
这里的顶层常量和底层常量有哪些区别,导致了这样的说法?
阿神2017-04-17 13:40:08
你看看const章節的內容就知道了。頂層常數是指內容不允許被修改的常數,例如const int* p; p是一個整數指針,它所指向的整數變數的指不能被修改。 const修飾符是右結合,所以這裡的const修飾int,表示內容不能修改。
底層常數是指值能被修改,但位址不能被修改的常數。例如int* const p; const右邊是指針,所以語句定義了一個不能指向其他記憶體區域的指針,但該記憶體區域的值是可以被修改的
伊谢尔伦2017-04-17 13:40:08
簡單的說就是:
指針能不能改變,是頂層const;
指針指向的東西能不能改變,是底層const。
一般在類型推導的過程中,頂層的const都會被忽略,而底層const被保留。
允許將頂層const變數賦值給非頂層const變量,但底層const不同的話,就不行。底層const不同相當於類型不同。