【发布时间】:2019-04-23 12:57:26
【问题描述】:
我正在学习 c++,我有一个关于演员表的问题。 我有一个 unsigned short *,我想把它转换成一个 unsigned int * 但我没有相同的值,我想知道为什么。
当我将 short 转换为 int(使用静态转换)时,我具有相同的值,但它不适用于 unsigned short * 到 unsigned int *
所以我试着理解为什么! short 是 4 个字节,int 可以是 8、16 或 32。 所以指针每次都进入内存很远? 但是为什么从 short 转换为 int 有效?
unsigned short *a = something(); // something return me a unsigned short *a
unsigned int *b = static_cast<unsigned int *>(a); // I also tried with reintepret_cast
std::cout << *a << std::endl // (print me my first value)
std::cout << *b << std::endl // (print me a wrong value)
结果不同...有人可以解释一下为什么以及如何解决这个问题吗?
非常感谢,
【问题讨论】:
-
将
unsigned short*转换为unsigned int*是危险的(嗯……未定义的行为)。为什么不(unsigned int)*a;?这会产生一个受支持的简单转换。 -
请注意,
static_cast甚至无法编译。 -
“如何解决这个问题”那里没有问题,你不能通过随机代码并期望它工作。
-
reinterpret_cast的名字相当糟糕。它应该被称为danger_you_are_about_to_shoot_yourself_in_the_foot_unless_you_really_really_know_what_you_are_doing_cast。
标签: c++