c++ 如何将`const std::vector< T*>`转换为`std::span< const T*>`

1rhkuytd  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(138)

标题.
我正在实现这个类:

#include <span>
#include <vector>

class MyClass {
public:
    std::span<int *> numbers(void) {
        return m_numbers;
    }

    std::span<const int *> cnumbers(void) const {
        // What to do here?
    }

private:
    std::vector<int *> m_numbers;
};

我的第一次尝试是使用非常量函数中的自动转换(我相信这与std:decay有关?我真的不明白)。

return m_numbers

这无法编译,没有已知的转换。
我发现的一个实现是这样的:

return std::span(m_numbers.begin(), m_numbers.end());

这将返回一个std::span<int * const>,但这并不是我想要的。使用cbegin的变体似乎没有帮助。
我的目标是c++20

6kkfgxo0

6kkfgxo01#

你想打破常规正确性返回std::span<const int *>将允许修改这些元素(指针本身,不会是const)。
正确的返回类型应该是std::span<const int * const>,请注意右边的const

相关问题