[英]void* cast to char* not lvalue?
我正在尝试制作一个需要void*
的函数,向其中复制一些内存,然后移动指针。 由于它是一个空指针,所以我想将其转换为char*
并将其移动,如下所示:
PVOID SendAndMoveHead(PVOID dest, const Message& message, const size_t& size)
{
PVOID ret = CopyMemory(dest, (PVOID)message.msg.c_str(), size);
((char*)dest) += size;
return ret;
}
但是,VS抱怨((char*)dest)
说
表达式必须是可修改的左值
我认为是这样,因为以下工作:
PVOID SendAndMoveHead(PVOID dest, const Message& message, const size_t& size)
{
PVOID ret = CopyMemory(dest, (PVOID)message.msg.c_str(), size);
char* d = (char*)dest;
d += size;
return (PVOID)d;
}
如果有人可以阐明为什么第一个版本不起作用,我将非常感激。
((char*)dest)
给您一个新的临时char *
。 ((char*)dest) += size;
会更改临时文件,并且无效,从而导致编译失败。
在第二个示例中, d
不是临时的,并且寿命足以返回。
或者,您可以编写return (char*)dest + size;
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.