1

次の点での違いは何ですか。

#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に保存されているため、高速ですか?const in a はコンパイル時に計算されるため、これは constexpr の使用例ですか? constexpr は、bss セクションに格納されている b に const を作成しますか?

ブレア

4

1 に答える 1

0

質問に constexpr タグが含まれているので、C++ 11 constexpr を使用できると想定しているため、関数を に変更してからconstexpr int get_value(constexpr int value);のような関数を使用できますconstexpr int b = get_value(4);。これにより、計算がコンパイル時に行われることが保証され、b はプリプロセッサ定数のようにコンパイラによって最適化されます。ただし、プログラムのどこかに b へのポインターが含まれている場合 (例: int* p = &b)、b最適化されていないため、実行時にメモリに格納されます。

于 2013-03-14T22:29:43.120 に答える