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


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

C++相談室 part129



725 名前:デフォルトの名無しさん (ワッチョイ f35b-tpgq) mailto:sage [2017/03/18(土) 20:18:06.83 ID:waR+gchT0.net]
>>709
いや結局何が言いたいんだ?

君:700「std::bind(&F::calc, f, _1, 2)は最適化されないかも…」
俺:703「それを期待するのは厳しいだろ」
君:704「いやできるし、そうなるべきだ」
俺:707「そりゃそうだが」

人間が見れば簡単に分かることが出来ないなんて!なんてのは全部だよ。
一般的にはポインタになった時点で最適化が難しくなる。

f->calc(x,k); // 直接呼び出し
std::bind(&F::calc, f, _1, 2)(x); // 直接呼び出し
std::function<...> f; // (G)
f = std::bind(&F::calc, f, _1, 2); // (H)
f(x); // 2段呼び出し // (I)
f = std::bind(&F::calc, f, 2, _1); // (J)
f(k); // 2段呼び出し // (K)

C++では「戻り値と引数」が合ってたら良いんだろ?
だったら(G)はいけるよな?
この場合、fには(H),(J)とも可能なんだよ。
バインドされているのは第1引数でも第2引数でもいい。
ところがこれを実行する際、直接呼び出しに展開する為には、
(I)と(K)で呼び出し方法を変えなければならない。
スタック上の引数の位置が異なるからね。
そして一般的には(H)(J)はどこか遠いところで代入されており、
通常はその関数外から与えられる。
だから最適化は難しいんだよ。






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

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

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