在C ++中,解析在编译时执行的表达式还是可以在运行时执行? 我正根据下面的例子考虑这些情况
编制时间
x = 2 + 3;
运行时间
x = a + b;
注意:a和b的值在运行时从控制台获取。
答案 0 :(得分:1)
这取决于编译器。许多现代编译器执行常量折叠 - 即2 + 3
等表达式已在编译时解析。但是,应用常量折叠的程度因编译器而异;它可能非常聪明,或者可能根本没有。
请注意,定义为constexpr
的表达式始终在编译时计算。 constexpr
表达式具有某些限制,可以保证编译器可以完全评估表达式。目前,这些限制似乎在标准的每次连续更新中被推迟。
答案 1 :(得分:0)
如果在编译时要添加的变量的值不是 fixed (例如const int a = 5;
),则表达式在编译时不能进行评估。在这种情况下,因为值来自命令行,所以必须在编译时计算表达式。