用C ++解析表达式

时间:2016-07-16 05:41:59

标签: c++

在C ++中,解析在编译时执行的表达式还是可以在运行时执行? 我正根据下面的例子考虑这些情况

编制时间

x = 2 + 3;

运行时间

x = a + b;

注意:a和b的值在运行时从控制台获取。

2 个答案:

答案 0 :(得分:1)

这取决于编译器。许多现代编译器执行常量折叠 - 即2 + 3等表达式已在编译时解析。但是,应用常量折叠的程度因编译器而异;它可能非常聪明,或者可能根本没有。

请注意,定义为constexpr的表达式始终在编译时计算。 constexpr表达式具有某些限制,可以保证编译器可以完全评估表达式。目前,这些限制似乎在标准的每次连续更新中被推迟。

答案 1 :(得分:0)

如果在编译时要添加的变量的值不是 fixed (例如const int a = 5;),则表达式在编译时不能进行评估。在这种情况下,因为值来自命令行,所以必须在编译时计算表达式。