c++ - Is this const_cast undefined behavior? -


i wondering whether following undefined behavior

// case 1: int *p = 0; int const *q = *const_cast<int const* const*>(&p);  // case 2: (i think same) int *p = 0; int const *const *pp = &p; int const *q = *pp; 

is undefined behavior reading int* if int const*? think undefined behavior, thought adding const in general safe, i'm unsure.

qualification-wise, it's fine. each expression split statement:

int *p = 0; // ok int **addrp = &p; // ok int const *const *caddrq = addrp; // ok, qualification conv. according §4.4/4 int const *q = *caddrq; // ok 

note rules of const_cast (§5.2.11/3) identical of qualification conversion, without requirement of being monotonically increasing in qualification. in case, because you're ever adding qualifications const_cast unnecessary.


concerning aliasing, don't think it's issue, here, or @ least it's not intended be.

like mentioned, there's new bullet in c++0x list of allowed access methods (§3.10) allows similar types ("similar" being types arising qualification conversions). in c++03 bullet missing, suspect bullet allowing more cv-qualified access meant cover that, technically isn't (that is, commitee overlooked this).


Comments

Popular posts from this blog

c# - how to write client side events functions for the combobox items -

exception - Python, pyPdf OCR error: pyPdf.utils.PdfReadError: EOF marker not found -