情况:
typedef unsigned int u32;
typedef unsigned char u8;
const u8 *x;
...
var = (u32)(*(const u32 *)x);var应该包含一个DWORD大小的值。关于上面的任务说明,我所知道的是:
最后,问题是:我认为在上面的第3条中,去引用会说我们从它得到的值是32位大小,所以如果是这样的话,为什么会有额外的强制转换(显式的?)说去引用的值是32位吗?仅仅执行上面的步骤1到3,而不必执行第4步,这不是很好吗?
谢谢你的澄清!
发布于 2011-03-09 16:25:22
最后的演员阵容是好的,因为你正在使用它的RHS的一个任务。
不确定是*运算符。这可能会给您两个未定义的行为:
访问bounds
char以外的对象的发布于 2011-03-09 16:26:39
在这种情况下,不需要最终的强制转换。以下表达方式:
(*(const u32 *)x)返回"const u32“值。因为您将它赋值给一个变量(可能是一个u32变量),所以您可以创建一个"const u32“值的副本,并且这个副本不需要是const。你自己决定你是否想要你刚刚制作的副本应该是康斯特的。因此,这是有效的:
u32 var = *(const u32 *)x;但这也是有效的:
const u32 var = *(const u32 *)x;但是在这种情况下,您不能在赋值之后再更改var的值。
请注意,此语句无效:
u32 &var = *(const u32 *)x;在这种情况下,您不是在复制,而是将var作为x变量内容的别名,如果表达式的结果是const,则别名也应该是const。
编译器可能会给出如下错误消息:
cannot convert from 'const u32' to 'u32 &'相反,您必须这样写:
const u32 &var = *(const u32 *)x;https://stackoverflow.com/questions/5248569
复制相似问题