function-pointer MANIACS

C++
0
zak @zakkas783

まぁ参照なし脳内で理解はできますが……… http://cpplover.blogspot.com/2010/07/blog-post_28.html

2010-07-28 09:16:57
若年寄(もう若くない) @kikairoya

このくらいなら余裕ですね RT @zakkas783: まぁ参照なし脳内で理解はできますが……… http://cpplover.blogspot.com/2010/07/blog-post_28.html

2010-07-28 09:19:46
めるぽん.c @melponn

C++ でマニアックな文法とか特に無いですよね。

2010-07-28 09:36:22
めるぽん.c @melponn

まあ優れた C/C++er な方々は void (*(*af[N])(int, void (*)(int)))(int); というのがどういう宣言なのかなんて一瞬で分かりますよね!

2010-07-28 09:41:19
めるぽん.c @melponn

まあ http://d.hatena.ne.jp/uskz/20060531/p1 なわけですけど、全く意味が分かりません。

2010-07-28 09:41:48
めるぽん.c @melponn

C++ の場合は大抵の文法がマニアックなわけで、そんなに大量にあるならもうマニアックとは言わないよねっていう。

2010-07-28 09:46:01
めるぽん.c @melponn

ちなみに T[10] への参照を返す関数を定義すると T (&f)()[10] { ... } になります。

2010-07-28 09:56:02
めるぽん.c @melponn

間違った T (&f())[10] ですごめんなさい

2010-07-28 09:56:35
zak @zakkas783

(業務で)使ったことないC++構文 その1:関数ポインタを返す関数定義………std/boost::function万歳!

2010-07-28 10:02:51
めるぽん.c @melponn

関数ポインタの配列を返す関数はどうやって書けばいいのだろうか。ちょっとやってみよう

2010-07-28 10:04:33
めるぽん.c @melponn

調査の結果、int (&(*f())())[10] { .. } と書けば int 配列への参照を返す関数へのポインタを返す関数の定義になって、int (*(&g())[10])() と書けば int (*)() の配列を返す関数の定義になるということが分かりました

2010-07-28 11:00:20
めるぽん.c @melponn

int (*)() の配列→int (*)() の配列への参照

2010-07-28 11:01:44
めるぽん.c @melponn

まあつまりこういうことになると http://ideone.com/08oyP

2010-07-28 11:05:46
めるぽん.c @melponn

外から適用されていくのは以外でした。内側から適用されると思ってたから最初逆に書いててはまりました。

2010-07-28 11:07:26
あんどちん(安藤敏彦) @andochin

まぁアレですよ。プログラムはトリッキーな書き方なんかせずに素直に書いて欲しいと思うわけですよ

2010-07-28 11:08:11
めるぽん.c @melponn

これらは引数無しの関数だからまだいいとして、更に引数ありの関数を引数にとる関数とかにしてしまうともっといい感じになりそうだ

2010-07-28 11:10:13
zak @zakkas783

@andochin さすがにちゃんと見ないと脳内でコンパイルできないレヴェル…

2010-07-28 15:11:34
あんどちん(安藤敏彦) @andochin

@zakkas783 これがわからないとC言語初級者らしいので頑張って脳内コンパイル出来るようになりたいです

2010-07-28 15:15:47
あんどちん(安藤敏彦) @andochin

関数ポインタ(更に続き): http://j.mp/bEyQSL ここの答えをコンパイラに聞いてみた http://ideone.com/wEt4P

2010-07-28 15:32:31