人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C++の話です.
他人のソースを解析しているのですが,
inline 返り値 &関数名(void) const {xxx;}
というコードに出くわしました.
関数名の&と{}の前のconstの意味するところは何なのでしょうか.無くても動くようなので,消してしまいたいですが,意味があると困るので確認したいのです.
ご存知の方よろしくお願いします.

●質問者: onepo
●カテゴリ:コンピュータ 学習・教育
✍キーワード:C++ const void コード ソース
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● wnagata
●27ポイント

関数宣言の後ろにconstをつけると、関数内でメンバ変数の値を変更しないことを示します。

したがって、何かの間違いでメンバ変数に値を代入してしまうと、

コンパイルエラーになります。

もちろん、なくても動きますし、inline 関数であれば、メンバ変数の設定を行うか行わないかは一目瞭然なのですが、その関数ではオブジェクトの状態を変えないと宣言することには意味がありますので、わざわざ消すことはないでしょう。

消したことで動作に変わりはありませんが、保守のことを考えると、つけておいたほうがいいでしょう。

◎質問者からの返答

なるほど,そういうことですか.

分かりやすい回答,ありがとうございます.


2 ● しおり
●27ポイント

コンパイルエラーになったり動きが変わる場合があるので、const参照やconstメンバ関数を理解していないのなら消すべきではないでしょう。

例えば、std::vectorには次のようにconstを取ってしまうと同じになってしまうメンバ関数がありますが、これにはちゃんとした意味があります。

◎質問者からの返答

「この関数が入っているクラスのメンバ変数をこの関数では変更しませんよ」ということですよね.消さない方が良いように思いました.

ありがとう.


3 ● KYODA
●26ポイント

関数名の前の&ですが、返り値の型を修飾していて、

返り値が、値渡しでなく、リファレンス渡しである、

と宣言しているのだと思います。

&をとると、意味がちがってしまいますので、

このままにしておくのが、よいと思われます。

◎質問者からの返答

リファレンス渡しというのは簡単に言えば,「当該データのアドレスを返しますよ」ということですよね.なんとなく意味は分かるのですが,こういう使い方を自分ではしたことがないので,いいのかと不安になってしまいました.

また,なくても動いたのは返り値が配列なので,たまたまですね.

ありがとうです.

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ