Существует много выгод использования недружественные функции. Хорошим примером является использование функции-члена std::begin()
вместо функции-члена .begin(),
, поскольку первая будет работать и с C-массивами, а вторая не имеет смысла для C-массивов.
Также имеет смысл иметь std::size()
по той же причине, по которой у нас есть std::begin(),
, чтобы пользователи могли писать код вроде:
int a[] = {1,2,3};
cout << std::size(a); // to print 3
Есть ли технические проблемы, связанные с включением такой функции в стандарт?
(Возможная реализация будет просто return end(a) - begin(a);
, которая будет работать как для C-массивов, так и для векторов.)
std::end
работает с массивами C и может сказать вам, где находится конец массива. Таким образом,std::size
тоже возможно. Ни один из них не будет работать для распавшихся массивов; это не изменилось. - person chris   schedule 22.05.2016