2

注意:这不是标题中具有此名称的十亿和一个问题的重复。这与指针和非常奇怪的东西有关,而不是偶然=而不是==.

我有一个 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

怎么了?

4

3 回答 3

7

(char*)out不是左值(本身可能是,out强制转换改变了事情),强制转换属于赋值的另一侧,并且您正在强制转换为 void 指针而不是 char 指针:

out = (void*) (new char[*size]);

在任何情况下,void*都可以从其他指针隐式转换,因此您只需:

out = new char[*size];
于 2012-01-07T00:12:20.563 回答
1

C 指针转换创建一个左值;除非您转换为引用类型,否则 C++ 指针转换不会。即,以下应该编译:

(char *&)out= new char[*size];
于 2012-01-07T00:37:44.050 回答
0

删除它,(char*)因为它在这里没有用。(或者它有一些你没有解释的目的。)

如果您有一个 void* 参数,则不能像参数一样简单地分配给它(以便让调用者看到该指针)void*&

于 2012-01-07T00:13:58.460 回答