注意:这不是标题中具有此名称的十亿和一个问题的重复。这与指针和非常奇怪的东西有关,而不是偶然=
而不是==
.
我有一个 C++ 函数,其中有一个void*
名为out
. 我有这条线:
(char*)out=new char[*size];
size
在哪里uint32_t*
。编译器抱怨:
fundemental_bin_types.h:55:32: error: lvalue required as left operand of assignment
怎么了?
注意:这不是标题中具有此名称的十亿和一个问题的重复。这与指针和非常奇怪的东西有关,而不是偶然=
而不是==
.
我有一个 C++ 函数,其中有一个void*
名为out
. 我有这条线:
(char*)out=new char[*size];
size
在哪里uint32_t*
。编译器抱怨:
fundemental_bin_types.h:55:32: error: lvalue required as left operand of assignment
怎么了?
(char*)out
不是左值(本身可能是,但out
强制转换改变了事情),强制转换属于赋值的另一侧,并且您正在强制转换为 void 指针而不是 char 指针:
out = (void*) (new char[*size]);
在任何情况下,void*
都可以从其他指针隐式转换,因此您只需:
out = new char[*size];
C 指针转换创建一个左值;除非您转换为引用类型,否则 C++ 指针转换不会。即,以下应该编译:
(char *&)out= new char[*size];
删除它,(char*)
因为它在这里没有用。(或者它有一些你没有解释的目的。)
如果您有一个 void* 参数,则不能像参数一样简单地分配给它(以便让调用者看到该指针)void*&
。