C++相談室 part131at TECH
C++相談室 part131 - 暇つぶし2ch1010:デフォルトの名無しさん
17/10/09 22:54:00.89 0USm99MRM.net
初期化はどう?って言われても・・
右辺値参照で初期化するのがベターな状況は
浮かびませんけど

1011:デフォルトの名無しさん
17/10/09 22:55:12.55 0USm99MRM.net
>>981
と言いつつも
思い浮かばないんでしょ?
じゃあ君もワイと一緒ですね

1012:デフォルトの名無しさん
17/10/09 23:09:59.39 1ynB1O3m0.net
んん?
右辺値を束縛したい(一時オブジェクトだから左辺値としての実体はない)
けどconst左辺値じゃダメ(中身を変更したいから)
 ↑
これのどこにわかりにくい点があるというのか?
「RVOが保証されるようになったらいらない」という意見なら理解できるが・・・

1013:デフォルトの名無しさん
17/10/09 23:14:06.35 1ynB1O3m0.net
たとえば swap の実装なんか(素朴には)moveを3回繰り返すんだから
右辺値参照の有用性は明らかだろ

1014:デフォルトの名無しさん
17/10/09 23:16:20.29 7RyTvmhPr.net
>>973「なんでそんなに一時オブジエクトを参照しなきゃいけないコードを書くの?」
 ↓
>>984「右辺値を束縛したい(一時オブジェクトだから左辺値としての実体はない)けどconst左辺値じゃダメ」
 「これのどこにわかりにくい点があるというのか?」
これがアスペというやつか

1015:デフォルトの名無しさん
17/10/09 23:20:00.09 1ynB1O3m0.net
>>986
は?
>>979に言ってるんだよ

1016:デフォルトの名無しさん
17/10/09 23:25:56.07 0USm99MRM.net
>>985
これを右辺値参照Verに書き換えて
利点を示してもらえますか?
void swap(int& a,int& b)
{
int c = a;
a = b;
b = c;
}
void main()
{
int a = 1;
int b = 2;
swap(a,b);
}

1017:デフォルトの名無しさん
17/10/09 23:26:35.20 1ynB1O3m0.net
>>986
そっちこそ唐突に>>793>>984を唐突に矢印で結び付けてるけど大丈夫か?
お前の脳内の連想なんて誰にもわからないぞ

1018:デフォルトの名無しさん
17/10/09 23:27:28.76 1ynB1O3m0.net
>>988
利点はない
intだもの

1019:デフォルトの名無しさん
17/10/09 23:31:15.79 0USm99MRM.net
なら何なら利点があるの?
long long型ならあるの?
もう訳が分からないよ

1020:デフォルトの名無しさん
17/10/09 23:32:58.04 1ynB1O3m0.net
>>991
コピーコストの大きいコンテナだったら三回も代入したくないだろ?

1021:デフォルトの名無しさん
17/10/09 23:34:48.01 jvobj8TT0.net
>>982
もう使わないなら右辺値参照版のコンストラクタに渡したほうがいいじゃん
そしたら、コピーが起きなくて済むでしょ?

1022:デフォルトの名無しさん
17/10/09 23:41:18.28 U0LcPFS10.net
>>986
右辺値を束縛したい文脈ではかわりにconst左辺値で常におkなのでは…(ていうかconstはあってもなくても良い
>>985
T型データのswapは素朴にはT型データのコピー3回+破棄2回ぐらいが生じる
のでわ…

1023:デフォルトの名無しさん
17/10/09 23:48:51.82 bLguG3ky0.net
swapが頻繁に起こるような用途なら、なんではじめからポインタで管理しないんですか?

1024:デフォルトの名無しさん
17/10/09 23:49:46.71 qIHa8iWG0.net
一時オブジェクトもglvalueなんだから
T &に束縛できればよかった

1025:デフォルトの名無しさん
17/10/09 23:52:41.96 jvobj8TT0.net
>>995
ヒープじゃなくてスタックで処理したいから

1026:デフォルトの名無しさん
17/10/09 23:55:42.49 0USm99MRM.net
結局のところ
右辺値参照はコピーコストを削減出来るのが利点で
それぐらいしか使い道がないってことか
かつ、コピーコンストラクタよりムーブコンストラクタの方が
コストを軽く出来るクラスに限られると
struct a{ void* p; }; // これには効果が期待出来るが
struct b{ int p[65536]; }; // これには効果は期待出来ない
結論としては、やっぱいらねーやこんなのってことだな

1027:デフォルトの名無しさん
17/10/09 23:58:36.68 jvobj8TT0.net
後者も効果が期待できるよ
そして、コピーコストが削減できるだけってのは正しいが、いるかいらないかは人による

1028:デフォルトの名無しさん
17/10/10 00:01:39.19 O5j+wjNW0.net
>>998
> struct b{ int p[65536]; }; // これには効果は期待出来ない
それはあんたがそんな構造をよく使うんなら正しい
よかったじゃないか、結論が出てw

1029:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 72日 12時間 33分 11秒

1030:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch