ここから本文です

C++ の便乗質問です。 sample( int (&file)[255] ); の引数関する質問がありま...

mit********さん

2019/11/2709:52:58

C++ の便乗質問です。

sample( int (&file)[255] );
の引数関する質問がありました。

この宣言自体は、文法的にはあっているとおもいますが、
配列の引数を 参照型にする意味がわかりません。

sample( int (file)[255] );
では、配列のアドレスが、変数 file にコピーされるだけですが、
上の宣言も同じ挙動をすると思います。

sample 関数内で file の中身を変更して返す 方法でも
あるのでしょうか。

この宣言のメリットがあれば、教えていただければ、幸いです。

# C メインなので 変なことをいっていれば、ご容赦ください。

閲覧数:
33
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

n2q********さん

2019/11/2712:24:57

【配列の引数を 参照型にする意味】

二つ考えてみました。


(1)テンプレートの場合に便利

template<size_t n>void sample(int (&file)[n])
{
for (int& r : file) {
//略
}
}

このようなテンプレートを作ることで 255 という定数のところをテンプレート引数にすることが出来ます。そうすると配列のサイズが幾らでも関係なく sample 関数で処理することが可能となります。


(2)オーバーロード

void sample(int (&file)[255]);
void sample(int (&file)[256]);

サイズによって異なる実装とすることが出来ます。特定のサイズ専用の実装とすることが何らかの特別な意味を持つ場合に良いやり方となる可能性があります。




~ご質問へのお答え~

『sample 関数内で file の中身を変更して返す 方法でもあるのでしょうか』

const は付いていませんので(つまり、const int (&file)[255] の形ではありませんから)「sample 関数内で file の中身を変更」できます。方法とかではなくて、全く普通にそうなります。

この回答は投票によってベストアンサーに選ばれました!

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる