【发布时间】:2017-09-08 08:36:54
【问题描述】:
我正在尝试创建一个接受void* 的函数,将一些内存复制到其中,然后移动指针。
由于它是一个 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;
}
如果有人能解释为什么第一个版本不能工作,我会非常感激。
【问题讨论】:
-
你不能转换赋值的左操作数。
-
可以说这应该被标记为 C,而不是 C++。
-
@nwp -
const Message&和message.msg.c_str()没有争论的余地。
标签: c++ void-pointers lvalue