I was looking at this answer and I was wondering if casting an object to its first member with reinterpret_cast and using the result could be safe in C++.
Let's assume that we have a class A, a class B and an instance b of B:
class A{
public:
int i;
void foo(){}
};
class B{
public:
A a;
};
B b;
Question 1: Is it safe to use b.a like this: reinterpret_cast<A*>(&b)->foo()
?
Note: In the general case we suppose that the class and its member are both standard layout.
My lecture of the available references on reinterpret_cast tells me such usage should be authorized as there is no aliasing violation, however it conflicts with many answers like this one.
Question2: Is it safe to use b.a like this: static_cast<A*>(static_cast<void*>(&b))->foo()
?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…