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

wxf*_*les 2 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
    }
};
Run Code Online (Sandbox Code Playgroud)

ild*_*arn 11

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

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

因为valarray_test::pointy是本身const,valarray_test::v被视为const并因此const过载operator[]被调用.制作valarray_test::v mutable或制作valarray_test::pointyconst.

  • "*是否假设`valarray`仅用于可以作为副本有效返回的简单类型?*"确实如此."*有没有一个很好的理由为什么`valarray`不能被设计为返回参考?*"不是现代编译器,但它可能是一个可证明的优化'valarray`最初设计时(`valarray`明确设计用于球出效率). (2认同)