Может быть, мой вопрос не совсем правильно сформирован, но мой код все прояснит.
#include <iostream>
using namespace std;
struct A{int n;};
struct B{int n;};
struct C : A, B{};
int main()
{
C c;
C* pc = &c;
std::cout<<"TEST1"<<std::endl;
cout << static_cast<B*>(pc) << "\n";
cout << reinterpret_cast<B*>(pc)<<"\n\n";
std::cout<<"TEST2"<<std::endl;
cout << static_cast<A*>(pc) << "\n";
cout << reinterpret_cast<A*>(pc)<<"\n";
}
И вывод:
TEST1
0042F830
0042F82C
TEST2
0042F82C
0042F82C
Я знаю, что использование reinterpret_cast — это неправильный дизайн. Я не думаю о дизайне, но поведение меня беспокоит. Может ли кто-нибудь объяснить, почему кастинг разными способами дает разные результаты в первый раз, но один и тот же результат во второй раз??
reinterpret_cast
почти всегда свидетельствует о плохом дизайне. Избегайте этого и пересмотрите подход. - person Ron   schedule 23.02.2018static_cast<B*>(pc)
- дайте мне расположениеB
части*pc
;reinterpret_cast<B*>(pc)
— рассматриватьpc
как местоположениеB
. - person molbdnilo   schedule 23.02.2018