为什么我不能在memcpy中使用const参数?

时间:2013-07-16 06:55:20

标签: c++ c const memcpy

我有一个struct cVector3d,我memcpy将它变成了这样的字符数组:

void  insert_into_stream(std::ostream& stream,  cVector3d vector)
{
    int length = sizeof(double)*3;
    char insert_buffer[sizeof(double)*3];
    memcpy(insert_buffer, &vector[0], length);
    stream.write(insert_buffer, length);
} 

如果我在参数列表中使用const cVector3d vector,则会收到“& requires l-value”错误。

2 个答案:

答案 0 :(得分:4)

原因在于您链接的文档:

double &  operator[] (unsigned int index)
double    operator[] (unsigned int index) const

当您使用非const版本时,您将获得l值引用,并且您可以获取其地址(引用的double的地址)。当你使用const-version时,你得到一个临时版本,并且语言禁止你获取它的地址。

答案 1 :(得分:1)

您的问题出现在文档中:

double  operator[] (unsigned int index) const

如果你有一个const向量,operator []会返回一个临时值。你不能拿一个临时的地址。