C++ 为什么我不能在memcpy中使用常量参数?

C++ 为什么我不能在memcpy中使用常量参数?,c++,c,constants,memcpy,C++,C,Constants,Memcpy,我有一个,我正在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(i

我有一个,我正在
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 cvectro3d vector
,则会出现“
&requires l-value
”错误。

原因在于您链接的文档中:

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

当您使用非常量版本时,您会得到一个l值引用,您可以获取其地址(即引用的
双精度
的地址)。当您使用const版本时,您会得到一个临时地址,并且语言禁止您使用它的地址。

您的问题在于文档中的以下内容:

double  operator[] (unsigned int index) const

如果得到常量向量,运算符[]将返回一个临时值。您不能获取临时地址。

显示获取错误的代码。他们为什么要这样做?@user494461看不出有任何明显的理由不返回常量引用。。。所以最好是联系他们。为了能够获取一个对象的地址,它首先必须有一个地址(即它必须驻留在内存中)。临时对象不提供此类保证,因此您无法获取其地址。语言就是这样设计的:这种明显的局限性存在于增强在完全不同的平台上的可移植性和/或给编译器编写者更多的自由,代价是程序员的自由。我同意@Tribse,它应该返回常量引用而不是临时引用。这就是它的价值所在,所以它闻起来确实像你正在使用的库中的一个设计错误。