为什么标准声称容器是对象

Why the Standard claims that containers are objects?

本文关键字:对象 标准 为什么      更新时间:2023-10-16

来自标准的容器的定义:

§23.2.1/1:容器是存储其他对象的对象。他们通过构造函数,破坏者,插入和擦除操作来控制这些对象的分配和交易。

我认为上面的容器的定义与C 底漆书的定义相矛盾(我更喜欢):

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

很明显,(抽象)类型不能是对象(任何对象都必须占据存储区域)。您可以说C 容器是类模板。但是模板也不是对象。从cppreference上有关于它的注释:

以下实体不是对象:值,参考,函数,枚举器, type ,非静态类成员,位, template ,类或功能模板专业,名称空间,参数包和此。

为什么标准声称容器是对象?也许某个地方有一个错误?

如果您要这么细微地看待事物,则标准库容器类型也不是对象。"容器"是A 概念:一种类型可以符合的特定接口和行为。vector是一个模板类,符合序列容器的概念。

没有名为"容器"的C 类型。因此,除非您没有引用本书的某些部分,否则C 底漆书显然是错误的。

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