Sunday, 15 April 2012

c++ - Why does this let me get a non-const pointer to a field of a const object? -



c++ - Why does this let me get a non-const pointer to a field of a const object? -

i compiling snippet clang++ ("apple clang version 4.1 (tags/apple/clang-421.11.66) (based on llvm 3.1svn)"), although gcc fine:

#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 { homecoming pages[offset >> 12] + (offset & 0xfff); } };

and compiles fine. i'm surprised because pointertooffset has const qualifier, homecoming value non-const unsigned char pointer.

i ensure returns values within memory range of pages, means actual non-const pointer actual const object data, , not dangling reference eventual re-create of target array.

the result, seems, const-incorrect method compiles nonetheless. makes legal?

in simplest words variable,

memorypage* pages;

will become as:

memorypage* const pages; // , not `const memorypage*` // ^^^^^

inside const function: pointertooffset().

the meaning of const class variable cannot modified. create pages unmutable entity, const has apply on pages , not contents pointed it. that's why there no error in compiler.

for sake of understanding, simpy seek declaring pages const memorypage* , notice compiler emit error in non-const functions.

c++ const

No comments:

Post a Comment