[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 11/17 15:19 / Filesize : 258 KB / Number-of Response : 1016
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part119



1 名前:デフォルトの名無しさん [2015/08/31(月) 18:19:04.13 ID:NE3NvROE.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part118
peace.2ch.net/test/read.cgi/tech/1435970316/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
peace.2ch.net/test/read.cgi/tech/1439849418/

次期規格C++1zはこちら
C++14/C++1z 20
peace.2ch.net/test/read.cgi/tech/1410382924/

■長いソースを貼るときはここへ。■
 codepad.org/
 ideone.com/

552 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 15:14:15.81 ID:hEAZFQJb.net]
aが右辺値参照なのはどうして?
右辺値参照と何の関連性が?

553 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 15:15:29.74 ID:zsE9aaJl.net]
>>544
右辺値を受け取ってるんだから右辺値参照なのは当たり前だろう

554 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 17:14:48.82 ID:x2H664Vf.net]
>>539
やり方?
何を指摘されてるかすらわかってないだろ w

555 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 17:37:38.84 ID:1KsOvSTX.net]
>>546
自分は全くの通りすがりですよ。
わからないので聞いてるだけ。

556 名前:デフォルトの名無しさん [2015/09/27(日) 17:42:40.55 ID:IjMgIUn3.net]
>>544
const左辺値参照でもよいはず

557 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 17:44:07.83 ID:hEAZFQJb.net]
ユーザーモードとカーネルモードがあるのに
そういうことに言及せずにざっくり4GB制限とか言ってるから
バカにされてるだけじゃね

558 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 17:51:25.33 ID:hvy9lckk.net]
そういう話とはちょっと違うと思ったけど、どうなの?

559 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 17:55:09.33 ID:Tcvq0fDO.net]
ID:hEAZFQJb が馬鹿な事は分かった。
ユーザーモードとカーネルモードで空間分離していれば3GBの制限も無いはずなんだが。

560 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 18:05:02.17 ID:hEAZFQJb.net]
誰も別空間とは言っていないのだが
むしろ同じ空間を目分量で分離しているからこそ問題であり
メモリの上限の話をする上で
言及しないのはおかしいのではと言う話なのだが



561 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 18:12:42.15 ID:Tcvq0fDO.net]
>>552
お前が賢いつもりなら、さっさと>>539に対して明確に回答すればいいだけ。
それも出来ないのに喚いているだけだから、お前は馬鹿なままなんだよ。

562 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 18:13:02.34 ID:Pogh5WEF.net]
32bit環境でもポインタのサイズを64bitにしてハードウェアを活かさない実装にしてもC及びC++の規格上問題ない

563 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 18:15:56.97 ID:hEAZFQJb.net]
いや別にそういう立場ではないんで

564 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 18:20:03.99 ID:Tcvq0fDO.net]
ID:hEAZFQJb : カーネルモード知っている俺カッケー
ID:Pogh5WEF : 屁理屈言える俺カッケー

だからお前らは馬鹿なままなんだよ。

565 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 18:22:11.81 ID:Pogh5WEF.net]
>>556
屁理屈もなにも一番元の話がそれなんだけど

566 名前:デフォルトの名無しさん [2015/09/27(日) 18:26:28.84 ID:IjMgIUn3.net]
sizeof(void *)の話とカーネルモードは本質的に無関係
無理やりこじつける実装も存在するというだけ

そもそも命令デコーダとアドレスデコーダは別物

567 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 19:00:43.12 ID:nW+23lOG.net]
C++インタプリタがあるんだから
何Gあろうが関係なくね

568 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 19:51:34.01 ID:YOaTuDE7.net]
もはや何を言い争っているのかわからん

569 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 19:53:58.16 ID:1KsOvSTX.net]
全然教えてくれないんじゃん

570 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 20:28:04.86 ID:Af4kFVrx.net]
元はJava,C#空想実装と現実のC,C++実装を比較するのはおかしいという話
空想実装でよければC,C++だってそんな制限はないと言ってるだけ
文脈嫁



571 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 21:41:42.41 ID:VW7AXb3O.net]
だけ

572 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 21:49:51.60 ID:KfU5Es7n.net]
空想実装と現実の実装の違いについては
JavaとCで違いがあるのか?
どちらも現実はビット数の制限受けてるだろ

573 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 22:48:35.59 ID:Tcvq0fDO.net]
>>561
そりゃまともな奴なら出来ないって言うからね。回答しようがない。
ここで引っかかっている馬鹿はその程度でしかない。
こいつらはCスゲーしか認めないようだが、そういう問題ではないんだがな。

574 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 01:23:45.19 ID:8FV3B/V7.net]
いいんだよ
各自好きな事言っとけ
ここは落書き

575 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 06:44:48.23 ID:Rj5Nu0nM.net]
>>565
>>546

バカがアホに諭すとか滑稽すぎ w

576 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 07:05:49.65 ID:oN5IJNc7.net]
もはやなんのスレか分からない

577 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 11:08:56.51 ID:BV7UhKgt.net]
C++のコードで参照渡しをやたらと多用する人がいますが、意図がよくわかりません。
ポインタの代替として使われているのでしょうか?

int hoge(Foo &foo);

再代入を行わない場合、普通にポインタ渡しでも意味は変わらない気がするのですが。
開発上の利便性を考えてのことなのでしょうか。
個人的な考察として、以下の可能性を想定しています。

1. "->"による値参照が嫌で、"."を用いたい。そのために参照渡しを多用している
2. オブジェクトの状態変化の可能性を示唆させるために参照渡しとポインタ渡しを使い分けている

578 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 11:21:34.67 ID:VY24hflb.net]
A a;
hoge(&a);
が面倒ってだけ

てか、C++ならスマートポインタ使え

579 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 11:21:55.29 ID:3TMmR4lP.net]
>>569
2の意味がわからんけど場合によってポインタで渡すより幾つか利点ある
null参照を渡せない
参照先を関数内で変更出来ない(ポインタでもconst付けりゃ出来なくする事出来るけど)

あと普通にポインタ渡しとか参照渡しを多用とか言ってるけど参照渡しは普通だから
むしろnullpointer渡すことが出来る時か文字列リテラル渡すときぐらいしかポインタ渡しは使わない

580 名前:デフォルトの名無しさん [2015/09/28(月) 11:26:57.20 ID:DQYQoyfG.net]
ポインター版の関数とポインターじゃない版の同じ関数を2回書かなくていいという意味もある



581 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 12:49:29.07 ID:4w+sdak1.net]
特別必要がない限りポインタ渡しなんてヤメレ

582 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 13:35:58.94 ID:BV7UhKgt.net]
レスありがとうございます。
C++の世界では参照渡しがデフォと考えた方が良さそうですね。

C++は他人のコードを眺める程度なのですが、
同じような用途なのに人によって参照渡しで統一している人やポインタ渡しで統一している人がいて不思議に思っていました。

583 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 13:47:22.82 ID:iX8okw0+.net]
メンバ変数を引数として渡す関数の場合、参照は使いにくい

584 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 14:26:10.97 ID:wVFkh7Dk.net]
>>574
はい、その通りです。
C++はポインタとプリプロセッサマクロの撲滅を目標の一つとして開発されています。
そのためC++ではポインタよりも参照が推奨されています。

C++であってもポインタを多用する人はいますが、
その人の勉強不足でCのポインタを引きずっているとも言えますし
C++の参照がポインタからの全面移行を促すだけの魅力が無いとも言えます

C形式のポインタを捨ててもらえるよう、C++は永遠に進化中です。

585 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 17:34:31.23 ID:rUo6g3/R.net]
例えば関数の引数なんかでオプション的な引数がある場合
(その引数があってもなくても関数が動作するような場合
例えばログ出力先の指定など)
ポインタだと楽なんだけどね
void runSomething(const std::string* log)
{
// log = 0なら何も出力しない
}
これってなんか横着せずに参照でやるべきなんだろうか

586 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 17:35:18.80 ID:rUo6g3/R.net]
上記constはおかしいな

587 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 18:47:53.83 ID:wVFkh7Dk.net]
>>577
俺ならデフォルト引数か関数オーバーライド使うかな?

参照はデフォルト引数出来たっけ?
ダメなら関数オーバーライドで。

String位ならデフォルト付き値渡し引数にconst付けてコンパイラさんお願いっ!てしちゃうかも

588 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 18:53:56.76 ID:VY24hflb.net]
オーバーライドじゃなくてオーバーロードやろ?

589 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 18:58:09.96 ID:XXoDc2O6.net]
>>577
ところでこの例の場合引数が省略された時に0が渡されるのは保証されてたっけ?

590 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 19:05:58.93 ID:4w+sdak1.net]
577の引数が省略されたらコンパイルエラーになることが保証されてるよw
NULLを渡されたら特別な処理をしたいならポインタ使ってもいいんじゃないか
俺ならそういう設計は可能な限り避けるけどな



591 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 19:07:49.95 ID:P8/hbuJG.net]
>>581
この例のままだと引数の省略は出来ない

void a(const std::string *s = 0);
とするか、意味は少し変わるが
void a(const std::string& s=std::string());
としてempty()の場合無しとして扱うか
俺は後者をよく使う

592 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 20:02:10.71 ID:91/ACm3S.net]
>>575
ん?
なんか面倒なことあったっけ?

593 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 20:07:14.94 ID:91/ACm3S.net]
>>582
> 577の引数が省略されたらコンパイルエラーになることが保証されてる

そんな保証あったっけ?

594 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 20:34:23.74 ID:tAj/1R7q.net]
もちろんです

595 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:21:10.12 ID:qXJ0fmsD.net]
>>570
何でもかんでもスマポにすればいいと言うわけではない
スコットメイヤー先生の糞本でも読んで出直せ

596 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:23:31.06 ID:1BrOiTcA.net]
うっせーハゲ

597 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:30:32.73 ID:AY6OxaHG.net]
>>583
>void a(const std::string& s=std::string());
void a(const srd::string& s = ""));
でええやろ

598 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:33:11.06 ID:mUEYl4pK.net]
スマートポインタってオーバーヘッドでかいでしょ
一度に大量の解放が起こると性能ガタ落ちだし
速度を追求するためにC++使ってるのに、本末転倒

599 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:35:19.98 ID:1BrOiTcA.net]
unique_ptrならいいだろ

600 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:38:52.17 ID:tAj/1R7q.net]
>>589
お前はいいかも知れないが
許容出来ない人も居るだろう

>>590
スマポのオーバーヘッドはアセンブリレベルで
マナポと完全に同一にまで改善されたというのが
ハーブサッターとスコットメイヤー教祖の教えなのだが
ただしunique_ptr<T>に限る



601 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:39:23.89 ID:ynPwQZO2.net]
つか、uniqlo_ptrしか使わんな

602 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:40:52.11 ID:ynPwQZO2.net]
///
unique_ptrだ
予測変換入ってもた

603 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:54:34.42 ID:FIIzSoGf.net]
つかstd::unique_ptrの構文が参照ではなくてポインタのそれである件について:

やっぱC++においては参照の方がおまけ概念
const T&以外の参照渡しは禁止

604 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:55:27.14 ID:0rYiKgaG.net]
>>583
>void a(const std::string& s=std::string());
>としてempty()の場合無しとして扱うか

おお、これでちゃんと動いた!
大抵はこれでどうにかできそう
良いこと聞いた

空文字列と文字列が無いことを区別して取り扱いたい時が稀に良くあるが
仕様変更できる場合が大半だな
文字列以外ではあまりないし

605 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:57:51.67 ID:mUEYl4pK.net]
>>592
いやでも、shared_ptrは遅いんでしょ?
unique_ptrが使える場面なんて限られてるし、片手落ちかと
だいたい、新技術を導入するか否かの決定権を持っている上の人たちは
長年生ポインタのやり方で染み付いている訳で、
便利だから乗り換えましょう、とはそうそういかないかと

606 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 22:57:53.72 ID:0rYiKgaG.net]
>>595
生ぽさえ撲滅出来ればそれでいいんじゃよ

607 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:01:49.61 ID:1BrOiTcA.net]
むしろshared_ptrのほうが使える場面が限られてる
遅いといってもshared_ptrのコストが問題になる場面なんてめったにないだろう

608 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:04:24.66 ID:tAj/1R7q.net]
ナマポをスマポに

609 名前:書き換えるときに
unique_ptrじゃなくてshared_ptrしかダメ
というのは作りが相当おかしい
[]
[ここ壊れてます]

610 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:20:39.17 ID:XXoDc2O6.net]
>>597
うちはナマポ使ってると、レビュー時にその必要性について議論させてるぞ

Cできちんとポインタを使いこなしていた人ほど
すぐにC++ではナマポ不使用派に転向しちゃう

基本、実績のある古いコードをそのまま持ってきた場合とシステムコールとかのC形式ライブラリ呼ぶところ位しかナマポは残らないな


shared _ptrが遅いというのは、ナマポで安全対策を入れていない場合と比べてだ
ナマポに安全対策を入れたら大抵はshared_ptrより遅くなるぞ

ナマポの方が速いと主張する人たちは
レビューとプロファイラーの前で生き残れなかった

ま、うちだけかもしれんが



611 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:24:13.61 ID:XXoDc2O6.net]
でもC++のスマポは記述が冗長なのが好きになれない

ナマポはレビュー時に見落とすくらいシンプルなのにね

612 名前:デフォルトの名無しさん [2015/09/28(月) 23:36:28.90 ID:FF3rjUqv.net]
動的記憶が前提だからね
あくまで用途はその範疇で

613 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:38:37.64 ID:FIIzSoGf.net]
いくらスマポが良いといっても
やめて!メモリの動的確保する気でしょう?
エロ同人みたいに

614 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:45:35.35 ID:0rYiKgaG.net]
う、、、ネタがわからん

615 名前:デフォルトの名無しさん mailto:sage [2015/09/28(月) 23:55:41.35 ID:0rYiKgaG.net]
実際、スマポも生ぽもほとんど使わないな

メモリ操作はSTLのコンテナとイテレータにお願いしちゃうし

ポインタ渡しは参照使うし

型変換とかも名前付きキャストとunionでどうにかなるし

616 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 00:42:40.24 ID:0lZfHTgJ.net]
まあポインタでも参照でも好きなもんを使えばいいよ。プログラムなんて動けばいいのさ。

617 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 01:17:31.36 ID:HqSuUkpS.net]
こまけぇこたぁ
    いいんだよ!!
  /)
 // /)
`///  __
|イ二つ/⌒⌒\
| 二⊃ (●) (●) \
/  ノ/⌒(_人_)⌒  \
\_/|  |┬|   |
 / \  `ー′  /

618 名前:デフォルトの名無しさん [2015/09/29(火) 02:44:20.18 ID:NXR0Nytt.net]
よくねえよヴォケ

619 名前:デフォルトの名無しさん [2015/09/29(火) 07:18:55.18 ID:UCFlulCD.net]
ナマポの利点ってなんなの

620 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 08:27:03.26 ID:4NffsMzC.net]
働かなくても生活出来ること



621 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 08:30:36.21 ID:Y2fWXifr.net]
>>571
>参照先を関数内で変更出来ない
意味がわからない
codepad.org/mXQd0mNP
参照であっても参照先を関数内で変更できるようだが

622 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 08:42:57.14 ID:Y2fWXifr.net]
>>576
STLのイテレータをみていると、これはポインタと同じ使い方
本当にポインタを撲滅する気があるようにはみえない
codepad.org/gQY11puS

623 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 08:46:58.42 ID:GdgkSls5.net]
>>612
参照が示す場所と言えば良かったかな?
参照先の値を変更出来るのは当たり前だからわざわざコード書かなくてもいいよ

624 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:18:41.17 ID:kfE15Zdi.net]
C++になっても生ポインタを結局ばりばりに
使うのだよな・・・みんな。

625 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:38:09.16 ID:bCmPOTpj.net]
>>613
それはナマポ派のひとを取り込むためにわざと記法を似せてるんじゃないかな?

626 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:42:32.67 ID:2BMWd/g5.net]
どうしてもイヤならC++なんか手を引くべき

627 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:43:37.29 ID:bCmPOTpj.net]
>>614
よく分からんがポインタのアドレス値そのものを書き換えるってこと??

もらったポインタをfor文の中でインクリメントしてデータアクセスする以外の用途が思いつかないな

上記の用法ならイテレータの参照を渡すかのが普通だからわざわざポインタ使うほどのものでもないし

628 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:46:03.17 ID:bCmPOTpj.net]
>>615
それがC++の良いところでもあり悪いところでもある
清濁併せて飲み込んじゃう混沌さがC++らしさ

629 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 09:51:42.83 ID:GdgkSls5.net]
>>618
> よく分からんがポインタのアドレス値そのものを書き換えるってこと??

そう
変更出来ない事を(細かい事だが)メリットとして挙げてる
ポインタもconst付ければ変更出来ないけど面倒くさいからな

630 名前:デフォルトの名無しさん [2015/09/29(火) 11:25:09.86 ID:NXR0Nytt.net]
標準アルゴリズムはナマポ前提でそ
ナマポとイテレータを透過的に置き換えられるってだけで
ナマポ撲滅を主張するような作りにはなってない



631 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 11:39:27.99 ID:9FBYnxt5.net]
ポインタを使うて事にそんなにアレルギーがある人がいるんだ…
コードを全部配列で書いてもアレルギーでるの?

632 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 11:49:34.30 ID:Fziu4eIr.net]
>>622
Cかよと面倒臭い気持ちにはなる
んで、しぶしぶtraitsを書こうと思って、c++ array specializeでググる

633 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 12:13:37.73 ID:XovM8eOK.net]
生ポがわいてんのか

634 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 12:35:12.59 ID:Y2fWXifr.net]
>>614
ますます意味がわからない

>>571
>参照先を関数内で変更出来ない

できちゃってるよ‥
codepad.org/6rGzlzmc
参照を使っても呼び出し元に影響を与えないわけではないのだが、どういうメリットを強調したかったの?

635 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 12:37:23.78 ID:bCmPOTpj.net]
>>620
あ、了解。やっとわかった。

ポインタのメリットとして書き換え可能をあげてるのかと勘違いしてた

参照のメリットとしてアドレス値(?)が書き換わる可能性が無いと言うことね

636 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 17:06:50.42 ID:0lZfHTgJ.net]
参照はだいたい理解したんだが
&& と言うのだけが理解出来ないよ。

637 名前:デフォルトの名無しさん [2015/09/29(火) 19:52:43.47 ID:NXR0Nytt.net]
テンポラリへの参照

638 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:32:38.62 ID:rSzsIUwL.net]
new, deleteを生で書かないという前提なら生ポでいいじゃん

639 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:37:38.49 ID:XSRpVFiu.net]
>>627
右辺値への参照です
 int a=0;
 int & lr = a; //左辺値参照
 int & rr = 0; // 右辺値参照

 void f(int &); void f(int &&); //両方のオーバーロード
 f( a ); // f(int &)
 f( 0 ); // f(int &&)

 int g();
 int && rr2 = g(); //g()呼び出し結果は右辺値

640 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:38:39.97 ID:XSRpVFiu.net]
失礼
int && rr = 0; // 右辺値参照
だった



641 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:42:24.19 ID:XSRpVFiu.net]
class A {
 void f() &;
 void f() &&;
}

A a;
a.f();//f()&
(new A())->f(); // f()&&

642 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 20:59:50.06 ID:UeLWTQcw.net]
shared_ptrが遅いって言ってるやつはどの操作にとんなコストがかかるか理解して言ってるんだろうか

643 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 21:05:55.31 ID:Z5H58J48.net]
shared_ptrを使ってみて遅いと評価することと
どの操作にとんなコストがかかるか理解
することにどのような因果関係があるのでしょう

644 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 21:09:20.14 ID:VAPx39zG.net]
まあ、実際sharedは遅いよ。
それでも多言語のGCやらに比べればマシだけど。
要は機能豊富過ぎるんだよね。

殆どの用途にはuniqueで十分

645 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:00:15.35 ID:UeLWTQcw.net]
どの操作にどんなコストが掛かるのか知らないと効率的な利用が出来ないだろ

646 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:06:58.07 ID:xQzivTWI.net]
shared_ptrの効率的な利用のためにshared_ptrの仕組みを理解することと
shared_ptrをナマポの代替で使ってみて遅いケースがあると判断することに
何の関係が

647 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:13:09.38 ID:VAPx39zG.net]
実装の詳細は知らんけど
ナマポと比較して
shared_ptr1つ目生成時中間バッファ作成コスト、コピー作成時とコピー削除時に同期コスト、weakも入れた最後の削除時に中間バッファ削除コスト、
デリファレンス時ノーコスト

ってな感じじゃね。

648 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:13:19.41 ID:diX6sJrx.net]
(new A())->f() は f() && でなくf() & が呼ばれる
*(new A()) が左辺値だから

649 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:31:50.55 ID:mPnf6nOs.net]
>>636
こないだstd::mapのstd::setを使ったらスゲー請求書が来てびっくりした

650 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 22:46:20.57 ID:diX6sJrx.net]
そういやshared_ptrのカスタムデリーターってtype erasureしてる?
制御情報と別にさらに動的領域が必要になりそうな



651 名前:デフォルトの名無しさん [2015/09/29(火) 23:01:51.29 ID:NXR0Nytt.net]
>>639
だよな、俺も変だと思った
ビルトイン演算子の単項 * は常に左辺値を生じるわけで

652 名前:デフォルトの名無しさん mailto:sage [2015/09/29(火) 23:17:58.28 ID:H886HULU.net]
shared_ptr使ったらいつのまにかuse_countが万単位になっててビビった

>>635みたいなバカは実測もしないでshared_ptrがGCより速いと勘違いしてんだろw






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<258KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef