C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 45 を表示中)
■24063 / )  Re[7]: 型指定子を認識してくれない
□投稿者/ 774RR (213回)-(2008/08/27(Wed) 12:51:57)
2008/08/27(Wed) 13:05:30 編集(投稿者)
2008/08/27(Wed) 13:05:17 編集(投稿者)

いやもうこれについてはリンク先ですべて述べられ済みだったりするわけで蛇足なのだが。

任意の T について T get() { ... } と書くと、この返却値としてはコピーが生成される。

コピーするコストが高い場合(でかいクラスとか)、ないし、
コピーできない場合(basic_stream はコピーできない)とかには
参照を使って T& get() { ... } であるほうが望ましい場合が多い

参照より安いコストでコピー・使用できる場合(int/double 等の組み込み型)や
そもそも複写が欲しい場合には T get() { ... } のほうが望ましい

call_traits はこの両者を自動で使い分けてくれるというわけで。

使い分けてくれている証明を
std::cout << &hint.get() << std::endl; // error! rvalue のアドレスを取ろうとした
std::cout << &hstr.get() << std::endl; // ok! == &hstr.data

#24060 さん // 番号が違っていたので修正
> あと、get は const 修飾した方がいいです。
だめです。参照を返せなくなります。
get() const と get() の両方を用意するのであればそれなりに意味はあります。

返信 編集キー/


管理者用

- Child Tree -