En C ++, size_t
(o, más correctamente, T::size_type
que es "generalmente" size_t
; es decir, un tipo unsigned
) se usa como el valor de retorno para size()
, el argumento para operator[]
, etc. (consulte std::vector
, et al.)
Por otra parte, los lenguajes .NET usan int
(y, opcionalmente, long
) para el mismo propósito; de hecho, los idiomas compatibles con CLS son no es necesario para admitir tipos sin firma / a>.
Dado que .NET es más nuevo que C ++, algo me dice que puede haber problemas usando unsigned int
incluso para cosas que "no pueden" ser negativas como un índice de matriz o longitud. ¿Es el enfoque de C ++ "artefacto histórico" para compatibilidad con versiones anteriores? ¿O hay compensaciones de diseño reales y significativas entre los dos enfoques?
¿Por qué esto importa? Bueno ... ¿qué debo usar para una nueva clase multidimensional en C ++; size_t
o 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
};