【发布时间】:2014-01-01 17:19:09
【问题描述】:
谁能解释一下为什么会这样:
char *p;
short i;
long l;
(long *) p = &l ; /* Legal cast */
(long) i = l ; /* Illegal cast */
我知道它与左值和右值有关,但 (long *) p 不应该是右值吗?
编辑:
对不起,我似乎把自己和其他人弄糊涂了,我在阅读"this MDSN" 时问了这个问题,我很惊讶地看到这个语法,我看到它是一个特殊功能,只要它的大小相同,就可以将左值转换为左值。
【问题讨论】:
-
两者都不是有效的 C++,这不应该编译。任何一种转换的结果都是您无法分配的右值。
-
这些都不适合我。
-
好吧,我不明白 (1) 是如何合法的。根据我的
clang++,它不是。他们都是错误的。 -
关于编辑:这很奇怪。如果这两种类型的大小相同,那为什么不直接说
p = (char *) &l?
标签: c++ pointers casting lvalue rvalue