我編譯這個片段鏗鏘++( 「蘋果鐺版本4.1(標籤/(基於LLVM 3.1svn蘋果/鐺-421.11.66))」),雖然也GCC它只是罰款:爲什麼這讓我得到一個非const指針指向一個const對象的字段?
#include <iostream>
struct Foo
{
typedef unsigned char MemoryPage[0x1000];
MemoryPage* pages;
Foo() { pages = new MemoryPage[16]; }
~Foo() { delete[] pages; }
unsigned char* PointerToOffset(unsigned offset) const
{
return pages[offset >> 12] + (offset & 0xfff);
}
};
它編譯得很好。我很驚訝,因爲PointerToOffset
具有const
限定符,但返回值是非const
unsigned char
指針。
我還可以保證它返回的pages
存儲器範圍內,這意味着我得到一個實際非const
指針實際const
對象數據內的值,而不是一個懸空參考目標陣列的最終拷貝。
結果似乎是一個常量不正確的方法。什麼使它合法?
這與const * const是不一樣的。 – 2013-02-12 06:10:23