我正在尝试提取一个const指针指向数组的一部分。我发现它在使用矢量时工作正常,但在使用valarray时不会编译(VS 2008)。有人可以解释问题是什么吗?
struct vector_test
{
std::vector<int> v;
const int *pointy(const int i) const
{
return &(v[i]); // Ok
}
};
struct valarray_test
{
std::valarray<int> v;
const int *pointy(const int i) const
{
return &(v[i]); // error C2102: '&' requires l-value
}
};
答案 0 :(得分:11)
std::valarray<T>::operator [](std::size_t)
会返回T&
,这样可以正常使用。
std::valarray<T>::operator [](std::size_t) const
会返回T
,这将是一个右值,因此无法获取其地址。
由于valarray_test::pointy
本身就是const
,valarray_test::v
被视为const
,因此调用const
的{{1}}重载。要么operator[]
valarray_test::v
要么要mutable
非 - valarray_test::pointy
。