Garbage Collection

塵も積もれば山

目次

Blog 利用状況

ニュース

C++とかC#とか数学ネタを投下していく予定です。

[その他のページ]
日々の四方山話を綴った日記出水の日記帳

書庫

日記カテゴリ

[C++0x]右辺値参照は小粒でも辛い

C++0xで登場するはずの、右辺値参照です。
コーディングスタイルが一気に変わりそうな、なかなか面白い構文です。

とりあえず、配列を求める関数を作ってみようと思います。
本来なら素数だったり、3の倍数と3の付く数だったりしますが、
今回は単純に友達a以上恋人b未満の整数を返す関数を作ります。

まずは、C#で書いてみます。

int [] foo(int a, int b){
  int length = b - a;
  int [] ret = new int[length];
  for(int n = 0; n < length; n++){
    ret[n] = n + a;
  }
  return ret;
}

これをそのままC++で書いてみます。

int * foo(int a, int b){
  int length = b - a;
  int *ret = new int[length];
  for(int n = 0; n < length; n++){
    ret[n] = n + a;
  }
  return ret;
}

ただC++の構文に置き換えただけなのに大問題のプログラムです。

問題は2つ
・配列の大きさがわからない
・deleteを相手任せ

これを回避する方法はいくつかありますが、今回はvectorを使ってみようと思います。

void foo(int a, int b, vector<int> &ret){
  int length = b - a;
  for(int n = 0; n < length; n++){
    ret.push_back(n + a);
  }
}

出来たのはいいんですけど、この方法だとどうやっても返り値にはできません。

それを返り値に見せかけるように記述出来るのが右辺値参照です。
今までの構文だと、返り値は必ずコピーになるので、
巨大な構造体のようなものを返り値にするのは抵抗がありました。

関数のアウトプットは原則返り値で返す、という決め事になれば、
インプット/アウトプットがわかりやすくなりそうです。

#ここまで書いたが、もう どーにも続かない

投稿日時 : 2008年7月30日 0:27

Feedback

# re: [C++0x]右辺参照は小粒でも辛い 2008/07/30 1:59 アキラ

RValue Reference だから、右辺"値"参照ですぜ

タイトル
名前
Url
コメント