javascript - JS 对象、Python 字典和 C++ 结构之间有什么区别?
问题描述
这篇文章解释了 Python 字典和 JavaScript 对象之间的差异/相似之处。但是,我想知道 JSobject
和 Pythondict
与 C++之间的差异/相似之处struct
。
这 3 种数据类型在它们各自的语言中似乎彼此等价,但是我认为使用它们中的每一个的应用程序都有更多的细微差别。否则将不需要其他数据结构,例如 C++ map
。
解决方案
C++ 没有内置的等效数据类型。
C++ 结构(只是具有默认公共成员可见性的类)在编译时确定其成员的名称和类型。例如,对于 C++ 结构/类,您不能在运行时执行这些操作:
- 询问一个对象它有哪些成员(反射)
- 询问对象是否有具有特定名称的成员
- 查找具有给定名称的对象成员
- 创建一个新成员
- 更改现有成员存储的值的类型
所有这些对于 JavaScript 对象和 Python 字典都是可能的,但对于 C++ 结构/类,这些都不可能。
关于香草 C++ 中最接近的东西,您必须std::map<std::string, void *>
手动管理每个值的内存,并且能够以某种方式确定存储了哪种值。
有一些其他人为 C++ 编写的变体类型。例如,boost 的变体类型可以工作,但您仍然必须提供在编译时需要使用的所有类型的列表。使用这种类型的值类型,您可以拥有与std::map<std::string, boost::variant<list, of, types, here>>
JavaScript 对象或 Python 字典类似的功能,但具有一组受限制的可接受类型。
但是,一般来说,您不需要 C++ 中的这种动态性,它具有处理这种事情的其他工具。
推荐阅读
- asp.net-core - 使用请求标头或用户在 Web API 中进行授权?
- python - 在每个 date_range 中生成多个日期单元格
- sql - 计算每种类别类型的最佳方法
- c - POSIX 信号量 - 无法确定导致分段错误的原因
- php - 如何进行内联更新?
- python - CloudFormation !Ref 主题不提供 ARN
- plsql - 在触发器 PL/SQL 中调用存储过程
- r - 在线性模型结果中保留因子标签
- python-3.x - 在 django restframework 中上传文件和 json 数据
- angular - Angular 10 在另一个内部使用组件(错误:不是已知元素)