以下方面有何不同之处:
#include <iostream>
using namespace std;
int get_value(int value){
return 3 * value;
}
int main(int argc, const char * argv[])
{
const int a = 5;
const int b = get_value(4);
return 0;
}
唯一的区别是const int a存储在bss部分中而const int b不存在,并且两者仍然由编译器强制执行。
因此,因为存储在bss中的a更快?因为a中的const是计算的编译时间,这是constexpr的用例吗? constexpr会将b中的const存储在bss部分吗?
布莱尔
答案 0 :(得分:0)
由于您在问题中包含了constexpr标记,我假设您可以使用C ++ 11 constexpr,因此您可以将函数更改为constexpr int get_value(constexpr int value);
,然后使用constexpr int b = get_value(4);
之类的函数。这将确保计算将在编译时完成,并且b可以由编译器优化,如前处理常量。但是,如果你编程的任何地方,你得到一个指向b的指针(例如int* p = &b
),b
未被优化,因此在运行时存储在内存中。