C ++에서는 size_t
(또는 더 정확하게 T::size_type
"보통" size_t
; 즉 unsigned
유형 인)가에 대한 반환 값 size()
,에 대한 인수 operator[]
등으로 사용됩니다 (등 참조 std::vector
).
반면에 .NET 언어 는 같은 목적 int
으로 (그리고 선택적으로 long
)를 사용합니다. 실제로 CLS 호환 언어는 서명되지 않은 형식을 지원할 필요 가 없습니다 .
.NET이 C ++보다 최신이라는 점을 고려 하면 배열 인덱스 나 길이와 같이 "아마도"음수 일 수없는 경우에도 사용하는 데 문제 가있을 수 있습니다 unsigned int
. 이전 버전과의 호환성을 위해 C ++ 접근 방식이 "역사 아티팩트"입니까? 아니면 두 접근 방식간에 실질적이고 중요한 설계 균형이 있습니까?
이것이 왜 중요한가? 글쎄 ... 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()
함수 (implementingIComparable
) 에서도 반환됩니다 . 32 비트 int는 일반적인 숫자의 유형으로 간주됩니다. 바람직한 이유가 있기 때문입니다.