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と見なされます。理由は明らかです。