- 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)はどこか遠いところで代入されており、 通常はその関数外から与えられる。 だから最適化は難しいんだよ。
|

|