指向矢量的指针,但不是指向valarray?

时间:2011-05-20 00:23:22

标签: c++ pointers valarray

我正在尝试提取一个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
    }
};

1 个答案:

答案 0 :(得分:11)

std::valarray<T>::operator [](std::size_t)会返回T&,这样可以正常使用。

std::valarray<T>::operator [](std::size_t) const会返回T,这将是一个右值,因此无法获取其地址。

由于valarray_test::pointy本身就是constvalarray_test::v被视为const,因此调用const的{​​{1}}重载。要么operator[] valarray_test::v要么要mutable非 - valarray_test::pointy