指针到向量,但不指向 valarray

Pointer into vector, but not into a valarray?

本文关键字:valarray 向量 指针      更新时间:2023-10-16

我正在尝试提取一个常量指针来部分通过数组。 我发现它在使用向量时工作正常,但在使用 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
    }
};

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,因此调用operator[]const重载。要么做valarray_test::v mutable,要么做valarray_test::pointyconst