首页 > 解决方案 > JS 对象、Python 字典和 C++ 结构之间有什么区别?

问题描述

这篇文章解释了 Python 字典和 JavaScript 对象之间的差异/相似之处。但是,我想知道 JSobject和 Pythondict与 C++之间的差异/相似之处struct

这 3 种数据类型在它们各自的语言中似乎彼此等价,但是我认为使用它们中的每一个的应用程序都有更多的细微差别。否则将不需要其他数据结构,例如 C++ map

标签: javascriptpythonc++

解决方案


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++ 中的这种动态性,它具有处理这种事情的其他工具。


推荐阅读