Rainer Deyke wrote:

> C++ casts perform three different logical functions:
>   - Removing cv-qualifiers. (const_cast)

Agreed.

>   - Reinterpreting raw bytes. (reinterpret_cast)

Safely though: It won't allow any wild bit representations. For really wild stuff, you need to use the C-style cast.

>   - Converting values. (static_cast/dynamic_cast)

I would like to separate static_cast and dynamic_cast:

- static_cast does two things:

a) can convert values: this does call the user-defined conversion operators if necessary

b) static_cast also communicates "trust me, this super class *really* is this subclass." In this latter case, no value is converted; rather, the type of the pointer value is changed, so that the member access offsets will be adjusted accordingly later on, when this pointer is used

- dynamic_cast performs only (b) above, but safely: "if this super class is actually this subclass, set the pointer to point to it". Otherwise the pointer is set to null. Again, no value conversion here.

Ali

Reply via email to