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

发布于 2024-11-08 02:41:38 字数 435 浏览 5 评论 0原文

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

I'm trying to extract a const pointer to part way through an array. I found it works fine when using a vector, but won't compile (VS 2008) when using a valarray. Can somebody explain what the problem is?

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
    }
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

债姬 2024-11-15 02:41:38

std::valarray::operator [](std::size_t) 返回一个 T&,它可以正常工作。

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

由于 valarray_test::pointy 本身就是 const,因此 valarray_test::v 被视为 const,因此 调用 operator[] 的 >const 重载。要么使 valarray_test::v mutable 要么使 valarray_test::pointyconst

std::valarray<T>::operator [](std::size_t) returns a T&, which will work fine.

std::valarray<T>::operator [](std::size_t) const returns a T, which will be an rvalue and consequently cannot have its address taken.

Because valarray_test::pointy is itself const, valarray_test::v is treated as const and consequently the const overload of operator[] is called. Either make valarray_test::v mutable or make valarray_test::pointy non-const.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文