auto&&

1
普通のC++使い、銀天すばる @SubaruG

C++0x さんは、テンプレートと const があるから型安全だし、 auto で効率よくプログラミングできるし、計算機リソースにおいても軽量だし、間違いなく LL ですね。←

2011-01-17 05:28:37
@mEGGrim

C++0xの型推論のautoの利点ってなんだろう。型はプログラミングしているときに大体自明じゃないか? って気がするんだけどそうじゃないのかな。ジェネリックプログラミングの方向で利用するのが正しいのかな?

2011-01-17 05:37:46
普通のC++使い、銀天すばる @SubaruG

@mEGGrim std:vector<std::string>::const_iterator なんて書きたくないです。

2011-01-17 05:38:44
普通のC++使い、銀天すばる @SubaruG

std::map<std::string, std::string>::const_iterator iter = m.find("hoge"); if( iter != m.end() ){ ~ } とか書きたくない。 auto 使わせろ。

2011-01-17 05:41:50
普通のC++使い、銀天すばる @SubaruG

そりゃ確かに、殆どのケースにおいて型は自明だけど、自明だったら推論させりゃいいじゃん。それこそ。

2011-01-17 05:46:10
普通のC++使い、銀天すばる @SubaruG

むしろ、自明じゃない場合には、明示的に書いた方が良い。

2011-01-17 05:46:32
普通のC++使い、銀天すばる @SubaruG

明示的に型をチェックすれば、型をチェックしたところでコンパイルエラーになってくれる。 auto を使うと、実際に使われるまではコンパイルエラーにならないし、エラーメッセージも意味不明になる。

2011-01-17 05:47:13
nanairo @nanairo_t

@SubaruG ありがとうございます。素晴らしくエレガントに書けますね。

2011-01-17 06:13:14
普通のC++使い、銀天すばる @SubaruG

@nanairo_t それとは別に、 auto& を使った http://ideone.com/1Kh0L のようなコードも書けますね。 int だとメリットは特にないですが、これがヘッダ依存の型だった場合とかはメリット高いです。

2011-01-17 06:16:48
普通のC++使い、銀天すばる @SubaruG

C++0x における auto を使った変数束縛は、変数を書き換えたい場合には auto を、変数を書き換えたくない場合には auto const& を、参照先を書き換えたい場合には auto& を、それぞれ使うのが良い。 http://bit.ly/gkJdiJ も参考に。

2011-01-17 06:20:49
普通のC++使い、銀天すばる @SubaruG

auto&& は、よっぽどの理由がない限り、使ってはいけません。

2011-01-17 06:22:04
普通のC++使い、銀天すばる @SubaruG

よっぽどの理由: http://bit.ly/fdKaB9 RT @SubaruG: auto&& は、よっぽどの理由がない限り、使ってはいけません。

2011-01-17 06:23:45
nanairo @nanairo_t

@SubaruG autoですか。通常省略される指定子としか覚えていませんでした。調べてみますね。情報ありです。

2011-01-17 06:25:09
普通のC++使い、銀天すばる @SubaruG

@nanairo_t この場合は int& と書いたのと同じです。毎回 pImpl->member1 って書くのは面倒だし効率も悪いので、あらかじめ参照を用意しておく感じですね。

2011-01-17 06:27:30
🌸桜花🌸 @rofi

C++難しい・・・ RT @SubaruG: よっぽどの理由: http://bit.ly/fdKaB9 RT @SubaruG: auto&& は、よっぽどの理由がない限り、使ってはいけません。

2011-01-17 06:42:53
普通のC++使い、銀天すばる @SubaruG

そりゃ、難しく書いてますし。 RT @rofi: C++難しい・・・ RT @SubaruG: よっぽどの理由: http://bit.ly/fdKaB9 RT @SubaruG: auto&& は、よっぽどの理由がない限り、使ってはいけません。

2011-01-17 06:44:06
普通のC++使い、銀天すばる @SubaruG

いやほんと、 auto && は型安全をぶち壊してくれる、うっかりミスの温床なので、よっぽど変なことをしない限りは、使っちゃ駄目ですよ。

2011-01-17 06:51:20
普通のC++使い、銀天すばる @SubaruG

コピー出来ないクラスを関数から値返しして、その値をローカル変数に束縛する、なんて状況は、普通に C++ を書く場合には起きえないです。 shared_ptr 使いなさい。

2011-01-17 06:53:00
nanairo @nanairo_t

@SubaruG 実はpimplはthisポインタを渡す必要もないという方に驚いてしまいました。このautoの仕様はC++0xからのものでしょうか?それともC言語からのものでしょうか?

2011-01-17 06:54:37
普通のC++使い、銀天すばる @SubaruG

@nanairo_t C言語にはそんな気の利いたものは無いですよ。

2011-01-17 06:55:30
普通のC++使い、銀天すばる @SubaruG

@nanairo_t auto の説明は http://bit.ly/efy1rF 辺りを参照してください。 pImpl に関しては、要するにやってることは不完全型を使ってメンバ構成を秘匿しようってだけなので、普通のクラスで出来ることなら(テンプレート以外)なんでも出来ます。

2011-01-17 07:01:07
nanairo @nanairo_t

@SubaruG なるほど。autoはC++0xから型推論してくれるようになったという事ですね。

2011-01-17 07:05:44