2

我来自 Python 背景,但我正在阅读 C++ 标准库中可用的对象和数据结构类型,我看到声明说,a vectorof strings:

vector<string> names(10);

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

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

1 回答 1

3

对象有两种参数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 中,它非常接近能够创建行为类似于内置类型的类类型。主要区别在于可以获取类类型的某些成员的地址,而内置类型无法访问相同的“成员”。另一个区别是内置类型不需要声明(实际上,它们不能声明),而类类型需要声明和/或定义(取决于它们的使用方式)。

于 2012-11-14T20:58:48.933 回答