C++ 为什么标准要求容器是对象?

C++ 为什么标准要求容器是对象?,c++,C++,标准中容器的定义: §23.2.1/1:容器是存储其他对象的对象。它们通过构造函数、析构函数、插入和擦除操作控制这些对象的分配和释放 我认为容器的定义与C++入门书的定义相矛盾(我更喜欢): 容器是一种类型,其对象包含给定类型的对象集合 很明显,(抽象)类型不能是对象(任何对象都必须占用存储区域)。 可以说C++ +容器是类模板。但模板也不是对象。有一个关于它的注释来自: 以下实体不是对象:值、引用、函数、枚举器、类型、非静态类成员、位字段、模板、类或函数模板专用化、命名空间、参数包和此 那么,

标准中容器的定义:

§23.2.1/1:容器是存储其他对象的对象。它们通过构造函数、析构函数、插入和擦除操作控制这些对象的分配和释放

我认为容器的定义与C++入门书的定义相矛盾(我更喜欢):

容器是一种类型,其对象包含给定类型的对象集合

很明显,(抽象)类型不能是对象(任何对象都必须占用存储区域)。 可以说C++ +<强>容器是类模板<强>。但模板也不是对象。有一个关于它的注释来自:

以下实体不是对象:值、引用、函数、枚举器、类型、非静态类成员、位字段、模板、类或函数模板专用化、命名空间、参数包和此


那么,为什么标准要求容器是对象呢?也许有什么地方出错了?

如果你想学究式地看待事物,那么标准库容器既不是类型也不是对象。“容器”是一个概念:类型可以遵循的一组特定接口和行为
vector
是符合序列容器概念的模板类

没有C++类型的“容器”。所以除非有一部分你没有引用的书,否则C++底稿书显然是错误的。


该标准在技术上更为正确。类型符合容器概念的对象是容器。因此,容器可以被认为是符合容器概念的任何对象。

你更喜欢教科书而不是标准?其实是一样的。他们说,
std::vector
是一种类型,该类型的实例是一个对象,该对象包含其他对象。他们只是忽略了类型的一部分,对C++标准如何影响语言的一个严重误解。在我看来,这句话缺少了一些上下文。我的理解是容器是对象,这些对象的类型是容器类型,而引用是建立后者的事实。@ Nahanover我只是希望标准是一个谨慎的东西,不忽略部分定义。是的,我错过了C++入门定义的一部分。这本书还说“向量是一种容器类型”。@Rodvi:Nicol的观点是模板本身不是一种类型<代码>矢量不是一种类型
vector
是一种类型,
vector
是另一种类型,
vector
是另一种类型,依此类推。所以不,
vector
不是一种容器类型,因为
vector
根本不是一种类型(但是,是的,这变得相当迂腐)。不过,标准中的措辞是准确的。容器是一个对象。例如,如果我定义
std::vector foo
,则
foo
是一个作为容器的对象。