経験的に次の動作 (gcc および VC++) ですが、有効で移植可能なコードですか?
typedef struct
{
int w[2];
} A;
struct B
{
int blah[2];
};
void my_func(B b)
{
using namespace std;
cout << b.blah[0] << b.blah[1] << endl;
}
int main(int argc, char* argv[])
{
using namespace std;
A a;
a.w[0] = 1;
a.w[1] = 2;
cout << a.w[0] << a.w[1] << endl;
// my_func(a); // compiler error, as expected
my_func(reinterpret_cast<B&>(a)); // reinterpret, magic?
my_func( *(B*)(&a) ); // is this equivalent?
return 0;
}
// Output:
// 12
// 12
// 12
- reinterpret_cast は有効ですか?
- C スタイルのキャストは同等ですか?
&a
ビットをタイプ B として解釈することを意図している場合、これは有効な/最善のアプローチですか?
(トピック外:なぜ私がこれをやろうとしているのか知りたい人のために、私は 128 ビットのメモリを必要とする 2 つの C ライブラリを扱っており、異なる内部名を持つ構造体を使用しています - 私の例の構造体によく似ています.私は memcopy を使いたくありませんし、サードパーティのコードをハックしたくありません。)