関数の中で宣言された文字列の配列を取得できないようです。g ++コンパイラは文字列と整数の配列を別々に表示しますか?
void foo(string arr[], int arrSize) {
string temp[arrSize]; //Results in error shown below
int temp2[arrSize]; // Compiles fine
}
私が述べてコンパイル時にエラーになっています: ... [...非POD要素タイプ「文字列」(別名「のbasic_string、アロケータ>」)の可変長配列を
私は、定数としてvoid foo(string arr[], const int arrSize);
を定数として宣言しようとしましたし、関数内で新しい定数の整数を宣言してarrSizeに初期化しても、どちらも同じエラーになります。私はこれをコンパイルすることができる唯一の方法は、私の一時的な文字列配列を宣言するときにマジックナンバーを使用することです。
また、代わりにベクターを使用することもできますが、この動作がなぜ発生しているのか不思議です。
ありがとうございました!
どちらもそれらの標準C++「誰が実際にそれを実装するために周りに来ませんでした」。今はVLAをどのように実装しているかはコンパイラによって異なります。 – Nawaz
そして、GCCがそれらを別々に扱う理由は、まだ興味深い質問です。 – HolyBlackCat
C++の配列サイズは、 'const'だけでなくコンパイル時定数でなければなりません。 'int temp2 [arrSize];が動作するという事実は、コンパイラ拡張です。 – user2357112