他人のソースを解析しているのですが,
inline 返り値 &関数名(void) const {xxx;}
というコードに出くわしました.
関数名の&と{}の前のconstの意味するところは何なのでしょうか.無くても動くようなので,消してしまいたいですが,意味があると困るので確認したいのです.
ご存知の方よろしくお願いします.
関数宣言の後ろにconstをつけると、関数内でメンバ変数の値を変更しないことを示します。
したがって、何かの間違いでメンバ変数に値を代入してしまうと、
コンパイルエラーになります。
もちろん、なくても動きますし、inline 関数であれば、メンバ変数の設定を行うか行わないかは一目瞭然なのですが、その関数ではオブジェクトの状態を変えないと宣言することには意味がありますので、わざわざ消すことはないでしょう。
消したことで動作に変わりはありませんが、保守のことを考えると、つけておいたほうがいいでしょう。
コンパイルエラーになったり動きが変わる場合があるので、const参照やconstメンバ関数を理解していないのなら消すべきではないでしょう。
例えば、std::vectorには次のようにconstを取ってしまうと同じになってしまうメンバ関数がありますが、これにはちゃんとした意味があります。
「この関数が入っているクラスのメンバ変数をこの関数では変更しませんよ」ということですよね.消さない方が良いように思いました.
ありがとう.
関数名の前の&ですが、返り値の型を修飾していて、
返り値が、値渡しでなく、リファレンス渡しである、
と宣言しているのだと思います。
&をとると、意味がちがってしまいますので、
このままにしておくのが、よいと思われます。
リファレンス渡しというのは簡単に言えば,「当該データのアドレスを返しますよ」ということですよね.なんとなく意味は分かるのですが,こういう使い方を自分ではしたことがないので,いいのかと不安になってしまいました.
また,なくても動いたのは返り値が配列なので,たまたまですね.
ありがとうです.
なるほど,そういうことですか.
分かりやすい回答,ありがとうございます.