如何在 Python 或 C++ 中执行任意字符串?
How can I execute an arbitrary string in Python or C++?
构建计算器的一种简单方法是不需要自己解析输入字符串,---即,如果可以依靠语言的内置计算器来完成。
为了实现这一点,人们期望存在某种"函数"F(std::string X)
,它接受诸如"7 + 3"
之类的字符串并删除其引号。这将允许一个人这样做:int k = F("7 + 3") = 7 + 3
.
除了计算器之外,如果我想输入报表怎么办?假设我想在我的程序中保留一行F(argv[1]);
,在那里可以输入"std::cout << 'Hello, World!'
"或"break
"或"case 17817:
"等内容。C++我们可以从命令行为变量赋值:那么为什么我不能设置一个占位符,不是为数字、字符或字符串,而是为整个语句设置占位符呢?
如果我的假设是正确的,我妄想期待这样的东西存在。尽管很明显,随着此类功能的存在,会出现无数问题,但我仍然想知道在实现仅删除字符串周围的引号的东西时会存在哪些困难。
问题:C++或Python中是否存在这样的"函数"F,无论是简单的表达式还是成熟的语句?
这样的函数存在于 Python 中。它是解释任意字符串的eval
函数。例如,您可以在 Python 解释器中尝试以下操作:
>>> def calc(e):
... return eval(e)
...
>>> calc("2+3")
5
eval
函数可以采用任意有效的 Python 语句。因此,正如您可能猜到的那样,一般来说,eval
使用起来不安全,因为它可以被攻击者利用。
大多数解释型语言,如JavaScript,Ruby等,确实提供了这样的动态评估函数。但是,这在编译语言(如C++(中是不可能的。不能简单地在运行时"解释"字符串 - 必须首先调用编译器来解析,编译和生成可执行代码。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 如何在 Python 或 C++ 中执行任意字符串?
- 如何动态执行具有任意参数类型的函数指针
- C++习语,用于在任意翻译单元中的main之前执行任意代码
- 如何在iOS模拟器上执行任意预构建的二进制文件