为什么没有std::size
Why is there no std::size?
Scott Meyers、Herb Sutter等人主张非成员函数而非成员函数。随着std::begin
、std::cend
等的添加,STL似乎正朝着这个方向发展。如果是这样的话,为什么没有std::size
?
我认为是因为定义自己的版本很容易:
namespace std {
// C++14
template <typename C>
decltype(auto) size(const C& c)
{
return distance(cbegin(c), cend(c));
}
}
还是我错过了什么?即是否存在不使用非成员size
的原因?
为什么没有
std::size
?
因为没有人及时编写一个建议,以便将其包含在C++14中。添加该标准的提案初稿日期为2014年5月,早在2014年2月的最后一轮投票中发出C++14标准之后。
该提案的修订版在11月的委员会最后一次会议上被投票纳入C++工作文件(见LWG动议20),因此您很可能会在标准的下一次修订版(C++17?)中看到它,以及std::empty()
和std::data()
。
相关文章:
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 为什么 GCC 不能假设 std::vector::size 在这个循环中不会改变?
- 迭代器库中的 std::size() 不适用于传递给函数的 C 样式数组
- std::string.size() 未知行为
- 从 std::string 到 std::array<char,size> 的 memcopy 额外数据是否是一种未定义的行为?
- 使用 std::size 来自非 const 上下文
- 错误:'class std::unique_ptr<std::set<long unsigned int> >'没有名为 'size' 的成员
- 为什么我必须在初始化 std::array<SomeStruct, size> 时指定每个项目的类型C++
- 为什么会出现错误:size不是std的成员
- 没有名为'size'在名称空间'std'
- std::具有initializer_list和size的unordered_map构造函数在main中编译,但不在类定
- 使用 constexpr 作为 std::array size
- std::span.size() vs array/vector size
- std ::向量距离函数如何给出比.size()更高的值
- 'std::out_of_range' what(): vector::_M_range_check: __n (即 0) >= this->size() (即 0)
- 在 c++ 中,std::string::size() 不计算修改后的字符串长度
- std::list.size() 如何具有恒定的复杂性?
- "Safe"将元素添加到 std::vector 的方法,超出了其 size() 但低于其容量 ()
- 成员功能在面向对象的框架中返回std :: vector.size()的效率
- std::array::max_size 和 std::array::size 给出不同结果的示例