0

私は2つの異なるシナリオを実行しようとしました:

シナリオ 1:

const auto arraySize = 10; // fine, arraySize is constant 
std::array<int, arraySize> data;

ここで、 arraySize はコンパイル時の定数として扱われるため、 std::array で許可されました。

シナリオ 2:

int sz=10;
const auto arraySize = sz; // fine .
std::array<int, arraySize> data; //error , arraySize is not compile time constant .

シナリオ 2 では、arrySize が sz の定数コピーであるにもかかわらず、arraySize はコンパイル時定数として扱われません。

これら 2 つのシナリオの扱いが異なるのはなぜですか?

4

2 に答える 2

3

みたいなこともあるから

int sz = 0;
std::cin >> sz;
const auto arraySize = sz;

ここでの値はsz実行時に定義されます。このような初期化でコンパイル エラーになるよりもconstexpr、 の代わりに を使用できます。const

于 2016-01-21T09:39:51.437 に答える
0

おそらく使用を検討する必要がありますconstexpr

int sz=10;定数に設定された変数です。コンパイラは、最適化時に定数を伝播するのに十分賢いかもしれません (またはそうでないかもしれません!)。

于 2016-01-21T09:39:45.467 に答える