由于LWG3320,这已被删除。
问题是它x.cbegin()应该真正做与 相同的事情std::begin(std::as_const(x)),这std::cbegin(x)就是定义为。
但对于 来说情况并非如此std::span,因为它实际上并不拥有它的元素,因此,它只有浅层常量。鉴于span<int> s;,s.cbegin()会给你一个int const*†而std::cbegin(s)给你一个int*。这是非常不一致的。s.cbegin()本来可以保留而让它返回begin()(如PL 247所提议的那样),但这可以说是令人困惑的,因此决议决定是简单地删除所有 const 成员和别名。
在任何情况下,std::cbegin(s)如果您希望容器本身不可变(从一span开始就不是问题),则始终有效。
†从技术上讲,实现已定义,不是必需的int const*,但出于解释目的,这是一个有用的虚构。
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |