void * cast to char *不是左值?

时间:2017-09-08 08:36:54

标签: c++ void-pointers 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;
}

如果有人能够解释为什么第一个版本不起作用我会非常感激。

1 个答案:

答案 0 :(得分:2)

((char*)dest)为您提供了一个新的临时char *((char*)dest) += size;会改变临时值并且没有效果,这会导致编译失败。

在第二个例子中,d不是一个临时的,并且足够长,可以返回。

或者你可以写return (char*)dest + size;