2016-05-21 9 views
0

メンバー以外の非フレンド機能を使用する場合はbenefitsがたくさんあります。良い例は、メンバ関数.begin(),の代わりに非メンバstd::begin()を使用することです。後者はC配列に対しても意味をなさないのに対し、前者はC配列でも動作するためです。同じ理由で、私たちのようなコードを書くために、ユーザーを有効にするstd::begin(),を持っている非メンバーフレンド `std :: size()`はC配列とベクトルで動作します

それは、あまりにもstd::size()を持っているために、より理にかなって:

int a[] = {1,2,3}; 
cout << std::size(a); // to print 3 

を標準でこのような機能を有するに関連する技術的な問題があります?

(可能な実装は、単にC-配列およびベクターの両方のために働くだろうreturn end(a) - begin(a);であろう。)

+3

http://stackoverflow.com/questions/28498555/why-is-there-no-stdsize – AnT

+0

この実装は、ランダムアクセスイテレータを持つコンテナでのみ機能します。 – chris

+1

@ user3386109、それは本当に関係ありません。 'std :: end'はC配列で動作し、配列の終わりがどこにあるかを知ることができます。したがって、 'std :: size'も可能です。これらのどちらも、減衰したアレイでは機能しません。変更されていません。 – chris

答えて

0

は、技術的な問題はありません。 Working Paperに投票されましたが、C++ 14のリリース後に発生しました。

Non-member size() and more (Revision 2)

WG21 2014-11 Urbana Minutes

http://en.cppreference.com/w/cpp/iterator/size

それはC++ 17に表示されることを期待しています。

P.S.副次的なことに、既存のstd::extentを使用して配列サイズを決定することはできますが、非コンテナおよびコンテナインターフェイスは統一されません。だから、これはあなたが話していることではありません。

関連する問題