C++也可以解释而不是编译
Could C++ also be interpreted instead of compiled?
我知道解释C++代码可能没有实际价值,这个问题只是为了娱乐和学习目的。
是否可以逐条语句解释C++代码语句而不是编译它?还请解释答案的原因。
如果不可能,是否有可以解释的语言子集?
这取决于
你所说的"逐句陈述"是什么意思。大多数时候,C++是一种严格的自上而下的语言:如果你想使用任何东西,你必须事先声明或定义它。所以这里没有问题。
但是,自上而下的方法也有例外。例如,类成员函数的主体看到类数据成员的声明,这些声明在源代码中以词法方式跟随它。可以调用已声明但尚未在翻译单元中定义的inline
函数(不过,定义必须在 TU 结束之前出现)。
这些可能会也可能不会违反您的"逐个陈述"的概念,这取决于该概念到底是什么。
根据您的评论进行编辑:
如果解释器对当前语句没有展望,那么它就不可能希望解释C++代码。使用上面给出的问题点的反例:
#include <iostream>
struct C
{
void foo() { std::cout << i << 'n'; }
int i;
};
int main()
{
C c;
c.i = 0;
c.foo();
}
或
#include <iostream>
inline void foo();
int main()
{
foo();
}
inline void foo()
{
std::cout << "xn";
}
它甚至不必涉及内联函数:
extern int i;
int main()
{
return i;
}
int i = 0;
编译和解释之间没有明确的界限。通常被认为是解释的大多数语言实际上是为某种 VM 编译的。C++也可以这样做。
相关文章:
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 为什么即使调用了析构函数,C++11 中的分离线程也可以执行
- 为什么即使直到最后才定义实际类型,也可以将依赖名称视为完整
- 斯塔克,堆栈,也可以在底部和顶部添加整数
- 重塑Microsoft的并发::d iagnostic::span,也可以检测外部跨度
- 在不工作的情况下为数组分配指针,但反过来也可以
- "fixed"大小的向量在 c++ 中也可以具有假大小(与内存大小相比)吗
- 由于删除对象而导致的 Cpp 代码主线程冻结可以使用智能指针解决,也可以不使用智能指针来解决
- 即使在同一类型上,也可以将击曲线调用新的位置
- g++ 编译:我可以链接到带有符号链接二进制文件的目录吗?
- 编译器编译也包括吗
- 除了两个构造函数外,C++库导入也可以工作
- 张量类,它有自己的存储,但也可以映射外部指针
- 如何将模板类型转换为字符串(如果它也可以是字符串)
- 在C 中的功能可以返回某物,也可以返回任何东西
- 也可以将特征用于1-矢量(标量)
- 在OpenGL 2.1中,即使在2D空间(具有2D纹理),也可以安全使用3D TEX坐标
- 即使在内置素上实例化,也可以向模板参数类型的驱动器进行明确调用
- C++也可以解释而不是编译