Указатель на вектор, но не на valarray? - PullRequest
2 голосов
/ 20 мая 2011

Я пытаюсь извлечь константный указатель на часть пути через массив. Я обнаружил, что он работает нормально при использовании вектора, но не компилируется (VS 2008) при использовании valarray. Может кто-нибудь объяснить, в чем проблема?

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 Ответ

11 голосов
/ 20 мая 2011

std::valarray<T>::operator [](std::size_t) возвращает T&, который будет работать нормально.

std::valarray<T>::operator [](std::size_t) const возвращает T, что будет r-значением и, следовательно, не может быть получено по его адресу.

Поскольку valarray_test::pointy само по себе const, valarray_test::v рассматривается как const и, следовательно, вызывается перегрузка const operator[]. Либо сделайте valarray_test::v mutable, либо сделайте valarray_test::pointy non- const.

...