C++相談室 part131 at TECH
[2ch|▼Menu]
[前50を表示]
1000:デフォルトの名無しさん
17/10/09 21:56:43.96 bLguG3ky0.net
ところでなんでそんなに一時オブジエクトを参照しなきゃいけないコードを書くの?
参照元を管理するのが面倒だから? そういう人は初めからGC言語使えばよくね? ということですか?

1001:デフォルトの名無しさん
17/10/09 22:03:17.69 Rk3/uNWr0.net
なんでとか言われても。。。
壊してもいい一時オブジェクトの場合、特別に効率的な扱いをしたくなるケースなんて山ほどある
それが分からないならC++なんて触らずにGC言語専門でやってればいいと思うよ

1002:はちみつ餃子
17/10/09 22:10:35.64 GeS0S50a0.net
そのあたりはトレードオフなんだよ。
そりゃあ気にせずに済むなら気にしたくないが、気にしなきゃならないときに出来ることがないのはつらいって話で。

1003:デフォルトの名無しさん
17/10/09 22:13:59.60 0USm99MRM.net
俺もわからん
左辺値参照ではなく右辺値参照を使った方が
良い状況ってどんなの?
あと唐突にガページコレクション出してるけど
何の関係があるの?

1004:デフォルトの名無しさん
17/10/09 22:24:17.86 bLguG3ky0.net
もしかしてC++で仕事したことないんですか?

1005:デフォルトの名無しさん
17/10/09 22:25:07.16 1ynB1O3m0.net
そりゃ右辺値を束縛したくてかつconst


1006:左辺値じゃダメな場合だろ



1007:デフォルトの名無しさん
17/10/09 22:43:46.89 0USm99MRM.net
んー?
結局無いんでしょ?
使うべきシチュが
そうならそう言えばいいのに

1008:デフォルトの名無しさん
17/10/09 22:45:47.51 jvobj8TT0.net
>>979
classの初期化はどう?

1009:デフォルトの名無しさん
17/10/09 22:51:16.17 UEIAYP2F0.net
使うシチュエーションがない?
規格決める奴等が無駄にあーだこーだ言ってるだけとか思ってるなら病院に行った方がいいと思う

1010:デフォルトの名無しさん
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

462日前に更新/267 KB
担当:undef