- C++相談室 part129 [無断転載禁止]©2ch.net
714 :デフォルトの名無しさん (ワッチョイ 738b-UnlH)[sage]:2017/03/19(日) 00:13:07.69 ID:F98WB86R0 - >>710-712
長文乙だがstd::bind()が(テンプレート関数なので)インライン展開されるということが何を含意し、 関数オブジェクトと組み合わせたときどういう効果があるかあんまお分かりではなさげ std::bind()内の第1引数への操作がインライン展開されるならば(そのようにstd::bind()自体が書かれているならば 第1引数の操作に関して >人間が見れば簡単に分かること は、 >コンパイラが見れば簡単に分かること と一致する(>>709の「std::bind()自体の書き方(中略)がよほどアレでない限りは」がソレを指してゐる で、第1引数が関数オブジェクトでありかつF::calc()が仮想関数で無い限りは、F::calc()というシンボルのアドレスが コンパイル時に決まるから、直接呼出しのコードにできる 第1引数がポインタの場合はそうとは限らず、std::bind()の呼び出しの外もみてポインタが指すシンボルが一意であることまで 確認しないとコンパイラはF::calc(this, x, 2)というcallで済むところを(*p)(this, x, 2)的なコードにしかできない
|