有没有像std :: size()这样的函数?

Adr*_*ian 12 c++ c++11

任意给定类型T的内置阵列X,也有功能std::begin()std::end()我可以打电话,但为什么是不是有std::size()?似乎奇怪没有那个.

我可以使用std::end(x)-std::begin(x),但仍然std::size(x)会更好.

是的,我知道这些std::vectorstd::array课程.这只是一个问题,为什么STL中还没有这样简单的东西.

Ric*_*y65 23

只是一个让人们知道N4280 "非成员大小()和更多(修订版2)"已被C++ 17工作草案接受的说明.这包括std::size()以及std::empty()std::data().


Ker*_* SB 14

std::extent,这将应用于数组的类型:

#include <type_traits>

int a[12];

assert(std::extent<decltype(a)>::value == 12);
Run Code Online (Sandbox Code Playgroud)

或者你可以使用std::distance(std::begin(a), std::end(a)).

前者显然是一个不变的表达,但在实践中,后者也可以静态地进行计算.

最后,总有一个本土的解决方案:

template <typename T, std::size_t N>
constexpr std::size_t array_size(T const (&)[N])
{ return N; };
Run Code Online (Sandbox Code Playgroud)

  • @JoshuaGreen:有一个[待定提案](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4017.htm)有一个免费的`std :: size`函数(如以及`std :: empty`). (6认同)
  • 是的,我知道本土版本.我只是想知道为什么它不在STL中.感谢`std :: extent`方法. (2认同)