4
struct Test {
void doAction() {}
};
// Create and save into a void*
void *ptr = new Test;
// Real use through a Test*
Test *t = static_cast<Test *>(ptr);
t->doAction();
// Delete
delete static_cast<Test *>(ptr);
ptrはオブジェクトのアドレスを保存するためにのみ使用され、アドレスはオブジェクトの真のタイプに逆参照されます。厳密なエイリアシング規則でこれはいいですか?
したがって、関係のないタイプに逆参照されない限り、厳密なエイリアシングルールでも問題ありませんか?
-fstrict-aliasingでGCCを使用してコンパイルします。 –
はい、正しいタイプにキャストしている限り、問題ありません。さて、C++コードが(主に非同期コールバックで)Cコードと相互作用する場所の多くでこれが行われていることがわかります – Arunmu