- スレを勃てるまでもないC/C++の質問はここで 22
792 :デフォルトの名無しさん[sage]:2014/11/10(月) 18:06:53.74 ID:tFlOeqoP - 質問です:
void f (void (A::*)() const &) {} は、関数f の定義らしいのですが、引数の型が良く分かりません。 どういうことでしょう。 そもそも、定義だとすると、引数には型だけでなく、仮引数名が必要のはずですが、 それも省略されているように思えます。コンパイラによっては、関数定義内部で使わ ない引数は、仮引数名を書いておくと警告が出てしまうので、仮引数名を省略することに よって回避できるようですが。 A::* は、メンバへのポインタのようです。 const & の部分が一番分かりません。(A::*) の部分は、関数へのポインタのように思え、 その次の()は、その関数の引数の括弧で引数が無い場合のもののようです。その次に const だけなら理解可能ですが、さらに & となるとこんなものは無い様に思えます。
|
- スレを勃てるまでもないC/C++の質問はここで 22
793 :デフォルトの名無しさん[sage]:2014/11/10(月) 18:09:51.53 ID:tFlOeqoP - 「&」の部分は、単に半角の「&」です。
単に「&」を書いたのですが、投稿時にこうなってしまったようです。
|
- スレを勃てるまでもないC/C++の質問はここで 22
794 :デフォルトの名無しさん[sage]:2014/11/10(月) 18:16:10.85 ID:tFlOeqoP - もしかすると、
void (*&rpFunc)() const を void (*)() const &rpFunc と書く記法でもありましたでしょうか??
|
- スレを勃てるまでもないC/C++の質問はここで 22
796 :デフォルトの名無しさん[sage]:2014/11/10(月) 18:26:18.54 ID:tFlOeqoP - >>795
void (A::*)() const であればそうでしょうが、実際は、 void (A::*)() const & のように、最後に&が付いてます。
|
- スレを勃てるまでもないC/C++の質問はここで 22
798 :デフォルトの名無しさん[sage]:2014/11/10(月) 18:37:05.73 ID:tFlOeqoP - 最近のC++の仕様で、
class A { void func1() const &; }; というようなメンバ関数 func1() を記述できるとすれば理解可能ですが。
|
- スレを勃てるまでもないC/C++の質問はここで 22
799 :デフォルトの名無しさん[sage]:2014/11/10(月) 18:44:07.22 ID:tFlOeqoP - >>798 で正しいようです。
「Ref-qualified member functions」 なる仕様がC++11で追加されてたようです: http://en.cppreference.com/w/cpp/language/function http://stackoverflow.com/questions/19474374/what-is-the-purpose-of-ref-qualified-member-functions
|