std :: size_t vs size_t vs std :: string :: size_type

Dav*_*vid 19 c++

  • size_t当我没有包含任何东西时会从哪里来?
  • 总是假设size_t== 是否合理std::size_t
  • 什么时候应该使用size_typestd容器(string::size_type,vector<T>::size_type,等)?

Mik*_*our 11

当我没有包含在空项目中的任何内容时,size_t来自哪里?

如果您没有包含任何内容,则无法使用size_t.它的定义<stddef.h>(<cstddef>如果你的那个标题的版本将定义放在全局命名空间中,也可能在其中定义std).

总是假设size_t == std :: size_t是否合理?

是.std只要包含适当的C++头(例如,<cstddef>而不是<stddef.h>),C库定义的所有类型和函数都包含在命名空间中

我什么时候应该使用std :: _ :: size_type?

你的意思是size_type在一些标准类和模板中定义的类型,如vector?如果您愿意,可以在使用这些类时使用它们.在大多数情况下,你会知道它是一样的size_t,所以你不妨使用它并节省一些打字.如果您正在编写通用代码,而您不知道该类是什么,那么最好size_type在不兼容的情况下使用size_t.

例如,您可能希望编写一个容器,用于容纳多于可以表示的项目size_t.您可以使用某种大数字类型来表示容器的大小,该大小不可转换为size_t.在这种情况下,代码size_t s = c.size()将无法编译 - 您需要使用Container::size_type.