Почему здесь важно использовать static_cast вместо reinterpret_cast?

На ответ на сообщение в блоге Раймонда Чена ,

Спрашивающий указал

Раймонд, я считаю, что пример C ++ неверен, поскольку позиция подобъекта базового класса в производном классе не указан в соответствии со стандартом ISO C ++ 2003 (10-3, стр. 168), и вы предполагаете что подобъект базового класса всегда находится в начале. C пример тоже подойдет для C ++, так что я бы придерживался его.

Раймонд ответил

[Код не делает этого предположения. Вот почему так важно используйте static_cast вместо reinterpret_cast. Попробуйте: добавить виртуальный на OVERLAPPED (так что впереди идет vtable) и посмотрите, что компилятор делает. -Рэймонд]

Я догадался, прочитав его комментарии. В примере можно использовать static_cast, а вот reinterpret_cast - нет. Поскольку reinterpret_cast не конвертируется в vtable. Я правильно понимаю?
Хотя, если я использую здесь приведение в стиле C (а не reinterpret_cast), может ли оно также пойти не так?

Я перечитал объяснение приведения типов в More Effective C ++, чтобы понять это. Но ответа по этому поводу не было.

9
задан Benjamin 5 February 2012 в 16:30
поделиться