void* dilemparkan ke char* bukan nilai?

Saya mencoba membuat fungsi yang mengambil void*, menyalin sebagian memori ke dalamnya, dan kemudian memindahkan penunjuk. Karena ini adalah penunjuk kosong, saya pikir saya akan melemparkannya ke char* dan memindahkannya, seperti:

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;
}

Namun, VS mengeluh tentang ((char*)dest) ucapannya

ekspresi harus saya nilai yang dapat dimodifikasi

yang menurut saya memang demikian, karena karya berikut ini:

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;
}

Jika seseorang dapat menjelaskan mengapa versi pertama tidak berfungsi, saya akan sangat menghargainya.


person Elias Finoli    schedule 08.09.2017    source sumber
comment
Anda tidak dapat mentransmisikan operan kiri tugas.   -  person metamorphling    schedule 08.09.2017
comment
Kemungkinan duplikat Mengapa pemeran lvalue berfungsi?   -  person Adrian Shum    schedule 08.09.2017
comment
Bisa dibilang ini harus diberi tag C, bukan C++.   -  person nwp    schedule 08.09.2017
comment
@nwp - const Message& dan message.msg.c_str() tidak memberikan ruang untuk argumen.   -  person StoryTeller - Unslander Monica    schedule 08.09.2017


Jawaban (1)


((char*)dest) memberi Anda char * sementara yang baru. ((char*)dest) += size; akan berubah sementara dan tidak berpengaruh, yang menyebabkan kegagalan kompilasi.

Dalam contoh kedua d bukan bersifat sementara dan hidup cukup lama untuk dikembalikan.

Alternatifnya, Anda dapat menulis return (char*)dest + size;.

person nwp    schedule 08.09.2017