3

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

1 回答 1

12

std::valarray<T>::operator [](std::size_t)返回 a T&,这将正常工作。

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

因为valarray_test::pointyis 本身constvalarray_test::v被视为const,因此调用了const重载。operator[]制作valarray_test::v mutable或制作valarray_test::pointyconst

于 2011-05-20T00:29:17.053 回答