- 867 名前:デフォルトの名無しさん mailto:sage [2018/04/18(水) 01:03:16.68 ID:fAoQEHU80.net]
- >>835
> C++ のラムダ式は operator()() で実現できるし、operator()() のシンタックスシュガーと考えてよい 一応それが禿がラムダをC++に採用するのに反対している理由だったと聞いたが、 結果的には折れたんだろ。 昨今は「出来ること」よりも「ソースコードの見やすさ」が重視されているし、妥当だと思うが。 比較すると、 1. そもそも operator()()(ファンクタ)では関数に見えない。これが最大のガン。 2. C/C++は階層記述能力が無く、関数内関数が出来ない。このため、 局所的に関数ポインタを使いたいだけの場合でも上位階層に関数を記述するしかなく、 結果的にその関数は他からも見える(使える)状態になってしまう。 匿名関数であれば、そこでしか使っていない事を文法的に保証できる。 3. ファンクタだとインスタンス変数は必ずコピーすることになる。 ラムダだとおそらく直接掴める場合もあり、この場合はケチれる。 (ただしこれは実装による) だから関数内関数(クロージャ付き、最低限その階層の変数は見えるもの=GCC拡張の仕様でいい)があれば、 1,2,3とも達成できるし、要らなかったかな、とも思う。 というか、C/C++とも、関数内関数(階層)は無しで押し切るつもりかよー、とは思う。 ラムダよりこっちの方が必要な気がするのだが。
|

|