【发布时间】:2016-07-25 12:56:35
【问题描述】:
首先,我是 C/C++ 初学者,请见谅。
在 Node.JS 中,所有变量都是动态的,我们可以将变量转换为任何类型。因此,Node.JS 是用 C++ 编写的,而在 C++ 或 C 中没有动态变量。那么动态变量是如何实现的呢?
在 JS 中:
var A;
A = 5; //Integer
A = "Hello world!"; //String
A = 2.5; //Float
A = 5 * "Hello world!"; // I do not sure about this one.
【问题讨论】:
-
哦,C++11 有动态类型的变量;编译器或标准运行时不会为您清理它们。您可以尝试使用与 RTTI 标志配对的
union创建一个(例如:std::type_info)。请注意,在 C++17 中,将有一个标准化的std::any,它是一个可以安全地为任何类型的对象。 -
看看std::any 和std::variant。不完全一样,但很相似。它们可能尚未在每个系统中实现,因为它们将成为 C++17 的一部分。
-
我觉得这个问题太笼统了。也许您可以通过关注动态变量的某些方面或某些特定的 JS 代码来使其变得更好?
-
另外,请记住,Node.JS 使用的 JavaScript 引擎 V8 是用 C++ 编写的,但这并不意味着 JS 代码会被翻译成 C++。
-
通常实现动态类型的方式(我认为这就是您要问的......),那么如果我们有例如两种类型(
struct my_int和struct my_string),那么这两种共享一个共同的结构头。该空间被所有类型占用并包含类型信息。投射时保留此标头有一些保证...
标签: c++ c++11 language-design dynamic-variables