質問: C++の配列変数の上手い使い方が分かりません。 例えば int a[100]; これ自体は便利なのですが、返り値に配列変数を使うことはできません。 自分がコードを書いているとよく配列変数を返り値に持ってきたい事が多々あります(下手くそなので) 配列変数の便利なところを教えていただけませんか?
回答: こんにちは。 > > 配列変数の便利なところを教えていただけませんか? > > > 私は要素数を明記しないで領域確保できる点は便利と思います。 ``` int a[]={1, 2, 3}; ``` ただ「変数」としてこれを使うことは確かに少ないです。 どちらかと言うと次のような使い方がほとんどです。 ``` char const*const string_table[]={"Taro", "Hanako", "Hiroshi"}; ``` (右側のconstの必要性を理解したのはごく最近ですが。) 他に変数として使うケースは、確かに少ないです。 要素数が本質的に固定長の場合は、C++11以降ならstd::array<>を使えば性能は落ちないし、お手軽コピーもできます。(もちろん、関数の戻り値にもできます。) 生配列は関数に渡すなどした瞬間、要素数が飛んでしまうので、頭痛いです。ちょっと油断すると不正メモリアクセスになりますから。 生配列「変数」を使うのは、使い捨てコードなどでキーを打つ回数が少なくて済むので使う時や、今回のように配列の振る舞いを調べる時くらいな気もします。 【話がそれますが】 クラス(std::array<>もクラスの1つです)を関数の戻り値で返却すると、コピーが無駄に走るので良くないと言われます。 しかし、ちょっとだけ注意してコーディングすれば、メジャーなコンパイラは、最適化(RVOやNRVO)するので、実は無駄なコピーは回避されます。 RVOやNRVOをサポートしていないコンパイラを対象とする場合を除き、使った方が可読性が上がるので積極的に使ってもよいのではないかと思います。