指针指向向量,但不是指向 valarray?
我正在尝试提取一个常量指针来遍历数组。我发现它在使用向量时工作正常,但在使用 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
}
};
I'm trying to extract a const pointer to part way through an array. I found it works fine when using a vector, but won't compile (VS 2008) when using a valarray. Can somebody explain what the problem is?
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
}
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
std::valarray::operator [](std::size_t)
返回一个T&
,它可以正常工作。std::valarray::operator [](std::size_t) const
返回一个T
,它将是一个右值,因此无法获取其地址。由于
valarray_test::pointy
本身就是const
,因此valarray_test::v
被视为const
,因此调用
重载。要么使operator[]
的 >constvalarray_test::v
mutable
要么使valarray_test::pointy
非const
。std::valarray<T>::operator [](std::size_t)
returns aT&
, which will work fine.std::valarray<T>::operator [](std::size_t) const
returns aT
, which will be an rvalue and consequently cannot have its address taken.Because
valarray_test::pointy
is itselfconst
,valarray_test::v
is treated asconst
and consequently theconst
overload ofoperator[]
is called. Either makevalarray_test::v
mutable
or makevalarray_test::pointy
non-const
.