使用C ++进行const初始化

时间:2012-11-10 03:05:31

标签: c++ const constexpr

以下方面有何不同之处:

#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部分吗?

布莱尔

1 个答案:

答案 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未被优化,因此在运行时存储在内存中。