関数で渡されたパラメータはconstプロパティを維持できないようです。 関数内のパラメータの情報を使用してconst変数を初期化し、次に配列型を作成する必要があるとします。どのようにできるのか?関数でconst変数を渡すには?
例:
#include <array>
using namespace std;
void foo(const int info)
{
const int num = info + 1; // seems num cannot be constant
array<int, num> arr;
}
コンパイルエラー:
test.cpp: In function ‘void foo(int)’:
test.cpp:8:16: error: the value of ‘num’ is not usable in a constant expression
array<int, num> arr;
^
test.cpp:7:15: note: ‘num’ was not initialized with a constant expression
const int num = info + 1; // seems num cannot be constant
^
アップデート:そのようなトラブルの原因となる配列型を使用して、単純な型の配列を使用して だけでOKです:
void foo(int info)
{
int array[info];
}
コンパイル時にinfo
を割り当てる必要はありませんか?
あなたが取得している実際のコンパイルエラーとは何ですか?テンプレートパラメータの引数としてランタイム変数を使用することはできません( 'const'は' constexpr'と同じではありません)。 – Dai
Numはコンパイル時定数でなければなりません。配列のサイズとして使用したいのですか? 'const'は再割り当てできないことを意味し、コンパイル時には定数ではありませんafaik – Carcigenicate
std :: arrayはコンパイル時定数が必要です。関数パラメータはコンパイル時定数にすることはできません。代わりにstd :: vectorが必要です。 –