【发布时间】:2018-02-18 10:21:52
【问题描述】:
考虑这段代码
T* pa = new T(13);
int address = reinterpret_cast<int>(pa);
其中 T 可以是任何内置类型。
1) 我不明白在这里重新解释演员有什么问题??
2) 这种强制转换会导致未定义行为的情况是什么?
3) pa 是否总是包含正确的内存地址十进制表示?
【问题讨论】:
-
整数和指针的大小不需要相同
-
如果
1 << (sizeof(T*) * CHAR_BIT)大于INT_MAX,那么您的地址值可能不适合int。 -
@NeilButterworth 好的,可以说地址足够大,可以包含该十六进制值,可以说它很长
-
通常是
sizeof(int) < sizeof(T *),所以“address”的值将不能代表pa的值。只要您只打印address以供娱乐就可以了,但是一旦您想将其用于有用的事情就不能。 -
另外,
[u]intptr_t就是为此目的而存在的。
标签: c++ c++11 pointers casting