为什么标准声称容器是对象
Why the Standard claims that containers are objects?
来自标准的容器的定义:
§23.2.1/1:容器是存储其他对象的对象。他们通过构造函数,破坏者,插入和擦除操作来控制这些对象的分配和交易。
我认为上面的容器的定义与C 底漆书的定义相矛盾(我更喜欢):
容器是一种类型,其对象包含给定类型的对象集合。
很明显,(抽象)类型不能是对象(任何对象都必须占据存储区域)。您可以说C 容器是类模板。但是模板也不是对象。从cppreference上有关于它的注释:
以下实体不是对象:值,参考,函数,枚举器, type ,非静态类成员,位, template ,类或功能模板专业,名称空间,参数包和此。
为什么标准声称容器是对象?也许某个地方有一个错误?
如果您要这么细微地看待事物,则标准库容器类型也不是对象。"容器"是A 概念:一种类型可以符合的特定接口和行为。vector
是一个模板类,符合序列容器的概念。
没有名为"容器"的C 类型。因此,除非您没有引用本书的某些部分,否则C 底漆书显然是错误的。
标准在技术上更正确。类型符合容器概念的对象是容器。因此,可以将容器视为符合容器概念的任何对象。
相关文章:
- 使用带有C++对象和标准库容器的插件系统
- 没有取消引用/解包对象的标准方法?
- 标准::时间::d类型的挥发性对象
- 如何将来自 Boost.Python 的map_indexing_suite与自定义而不是标准对象一起使用?
- 无法重置 std::shared_ptr 标准::设置<>中的对象...为什么?
- C++标准:是否有结果对象?
- 在C++标准中记录对象的内存布局的哪个位置?
- 流对象来表示文件输入,然后是标准输入?
- 如何创建像标准库头一样的头,以便在不链接头中函数的所有对象文件的情况下编译程序?
- 列出 n 个对象的所有 k 排列的有效方法,同时满足特定标准
- 有没有办法为静态对象成员定义一个符合开关标准的常量?
- 哪个C 标准包括要添加到对象文件中的文件强制代码 /数据
- 提升::可选与标准::不可复制对象的可选
- 在标准布局对象中进行指针运算(例如,使用偏移量)时,我们是否需要使用 std::launder?
- 根据C++标准,int 变量是对象吗?
- 在C 中对二进制对象进行编码/解码的标准方法
- 从C 创建.NET标准对象
- 为非标准对象定义散列函数和相等函数
- 基对象和继承对象,用于将标准变量包装在C++中
- 如何在不注册对象的情况下访问标准项模型的数据?