C++の話です.

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

回答の条件
  • 1人2回まで
  • 登録:2007/04/04 20:14:20
  • 終了:2007/04/11 20:15:03

回答(3件)

id:wnagata No.1

wnagata回答回数170ベストアンサー獲得回数182007/04/04 20:24:35

ポイント27pt

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

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

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

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

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

id:onepo

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

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

2007/04/04 20:27:08
id:Bookmarker No.2

しおり回答回数191ベストアンサー獲得回数342007/04/04 21:22:13

ポイント27pt

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

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

  • reference operator[](size_type);
  • const_reference operator[](size_type) const;
id:onepo

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

ありがとう.

2007/04/05 08:18:07
id:j-kyoda No.3

KYODA回答回数7ベストアンサー獲得回数32007/04/04 23:21:22

ポイント26pt

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

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

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

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

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

id:onepo

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

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

ありがとうです.

2007/04/05 08:20:10

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません