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

What do the brackets after a declaration of a vector object mean?

本文关键字:是什么 意思 对象 声明 向量      更新时间:2023-10-16

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

vector<string> names(10);

将指示一个vector对象被初始化为容纳10个类型为string的对象。我的问题是:

  • 声明的<string>部分是否具有C++类系统的抽象,即它是向量对象的内置语法,还是类系统的某些功能的一部分,可以用于用户定义的类定义
  • 我假设名称后面的括号是传递给构造函数的参数,这是对的吗
  • string是像int一样的内置类型,还是由标准库定义的对象。因此,内置类型和其他对象之间有区别吗(例如,所有"类型"都是Python中的对象)

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

  1. 模板参数用于std::vector值类型和分配器类型,后者为默认类型。也就是说,std::vector<std::string>实际上恰好是std::vector<std::string, std::allocator<std::string> >
  2. 有一些运行时参数作为构造函数参数传递,std::vector<...>采用了相当多的这些参数的组合。在上面引用的使用中,10是给定给向量的初始元素的数量

因此,要回答您的具体问题:

  1. string恰好是std::string,并没有什么特别之处。您可以使用任何用户定义的类型来建模某些概念(例如,类型需要是CopyConstructible)
  2. 括号中的参数是构造函数参数(在C++上下文中,括号通常是[],但术语不明确)
  3. string,实际上std::string并没有被定义为内置类型,但它是标准C++库中的一个类型。然而,标准C++库类型的实现方式在很大程度上取决于C++实现,即,一个实现可以选择将其内置(只要它仍然可以像类类型一样使用)

在C++中,内置类型和类类型之间有一些区别,但在C++2011中,它几乎可以创建行为类似于内置类型的类类型。主要区别在于,可以获取类类型的某些成员的地址,而内置类型无法访问相同的"成员"。另一个区别是,内置类型不需要声明(实际上,它们不能声明),而类类型需要声明和/或定义(取决于它们的使用方式)。