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

时间:2016-12-22 20:01:01

标签: c++

容器从标准中的定义:

  

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

我认为上面的容器定义与C ++ Primer book(我更喜欢)中的定义相矛盾:

  

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

很明显(抽象)类型不能是对象(任何对象都必须占用存储区域)。 你可以说C ++ 容器是一个类模板。但模板也不是对象。有关cppreference的说明:

  

以下实体不是对象:值,引用,函数,枚举器,类型,非静态类成员,位字段,模板,类或函数模板specialization,namespace,parameter pack和this。

那么为什么标准声称容器是对象?也许在某处出现了错误?

1 个答案:

答案 0 :(得分:2)

如果要以迂腐的方式看待事物,那么标准库容器既不是类型也不是对象。 "集装箱"是一个概念:一个类型可以符合的特定接口和行为集。 vector是一个模板类,它符合序列容器的概念。

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

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