C ++では、size_t(または、より正確にはT::size_type「通常」であるsize_t、すなわち、unsignedタイプ)の戻り値として使用されsize()、引数operator[]等、(参照std::vector、ら。)。
一方、.NET言語は同じ目的でint(および、オプションでlong)を使用します。実際、CLS準拠の言語は、符号なしの型をサポートする必要はありません。
.NETがC ++よりも新しいことを考えると、配列インデックスや長さのように「おそらく」負になれないものでも使用に問題があるかもしれunsigned intないということがわかります。後方互換性のためのC ++アプローチは「歴史的なアーティファクト」ですか?または、2つのアプローチの間に実際の重要な設計上のトレードオフがありますか?
なぜこれが重要なのですか?さて... C ++の新しい多次元クラスには何を使うべきですか。size_tまたはint?
struct Foo final // e.g., image, matrix, etc.
{
typedef int32_t /* or int64_t*/ dimension_type; // *OR* always "size_t" ?
typedef size_t size_type; // c.f., std::vector<>
dimension_type bar_; // maybe rows, or x
dimension_type baz_; // e.g., columns, or y
size_type size() const { ... } // STL-like interface
};
-1インデックスを返す関数から返され、「見つかりません」または「範囲外」を示します。Compare()関数からも返されます(実装IComparable)。32ビットのintは、一般的な数値のgo to typeと見なされます。理由は明らかです。