reinterpret_cast の正しい使い方を知りたいです。void ** ポインターを使用して uint64_t 型のアドレス (0x1122 など) を保存する必要があるシナリオがあります (以下のコード例を参照)。そうする3つの方法はすべてうまくいくようです。それらの違いは何ですか?それらの1つは実際に間違っていますか?また、これを行う最良の方法は何ですか? ありがとう!
#include <iostream>
#include <cstdint>
using std::cout;
using std::endl;
int main()
{
void **localAddr;
void *mem;
localAddr = &mem;
// The above three lines is the setup that I have to work with.
// I can't change that. Given this setup, I need to assign an
// address 0x1122 to mem using localAddr.
// Method 1
*localAddr = reinterpret_cast<uint64_t*>(0x1122);
cout << mem << endl; // Prints 0x1122
// Method 2
*(reinterpret_cast<uint64_t*>(localAddr)) = 0x1122;
cout << mem << endl; // Prints 0x1122
// Method 3
*localAddr = reinterpret_cast<void*>(0x1122);
cout << mem << endl; // Prints 0x1122
return 0;
}