声明向量对象后的括号是什么意思?

时间:2012-11-14 20:45:30

标签: c++ oop

我来自Python背景,但我正在阅读C ++标准库中可用的对象和数据结构的类型,我看到声明为vector字符串:

vector<string> names(10);

表示初始化vector对象以容纳10个string类型的对象。我的问题是:

  • 声明的<string>部分是否具有C ++类系统的抽象,即它是矢量对象的构建语法还是可以在用户定义的类系统的某些特性的一部分类定义?
  • 我是否正确假设名称后面的括号是传递给构造函数的参数?
  • stringint内置类型还是标准库定义的对象。因此,内置类型和其他对象之间是否存在差异(例如,所有“类型”都是Python中的对象)?

1 个答案:

答案 0 :(得分:3)

std::vector个对象有两种参数:

  1. std::vector值类型的模板参数和后者默认的分配器类型。也就是说,std::vector<std::string>实际上恰好是std::vector<std::string, std::allocator<std::string> >
  2. 有作为构造函数参数传递的运行时参数,std::vector<...>采用了很多组合。在上面引用的用法中,10是给予向量的初始元素的数量。
  3. 所以,回答你的具体问题:

    1. string恰好是std::string,并没有什么特别之处。您可以使用任何为某些概念建模的用户定义类型(例如,类型需要为CopyConstructible)。
    2. 括号中的参数是构造函数参数(在C ++上下文括号中通常是[]但是术语含糊不清。)
    3. string,实际上std::string未定义为内置类型,但它是标准C ++库中的类型。标准C ++库类型的实现方式几乎取决于C ++实现,但是,实现可以选择使其内置(只要它仍然可以像类类型一样使用)。
    4. 在C ++中,内置类型和类类型之间存在一些差异,但是使用C ++ 2011,它非常接近于能够创建类似于内置类型的类类型。主要区别在于可以获取类类型的某些成员的地址,而内置类型无法访问相同的“成员”。另一个区别是内置类型不需要声明(实际上,它们不能被声明),而类类型需要声明和/或定义(取决于它们的使用方式)。