标题.
我正在实现这个类:
#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
1条答案
按热度按时间6kkfgxo01#
你想打破常规正确性返回
std::span<const int *>
将允许修改这些元素(指针本身,不会是const
)。正确的返回类型应该是
std::span<const int * const>
,请注意右边的const
。