私はC++の関数ポインタの構文を理解しようとしています。私が入力したときのLinuxのEclipseで:C++のvoid(*)は何かを意味しますか?
void(*);
それは構文エラーを示すメッセージで強調表示されましたが、コンパイルしてプログラムを実行させました。その後Visual Studioで試してみましたが、 "Expected an expression"と言ってコンパイルされません。しかし、奇妙なことは私がそうするときです:
std::vector<void(*)> myVector;
これはVisual Studioでうまくコンパイルされます。また、いくつかのオンラインコンパイラvoid(*);それ自身でうまく動作します。私はことを知っている..
void (*)();
...
は関数ポインタであり、void();
...あなたが行うことができる理由である関数のシグネチャは、次のとおりです。
std::function<void()> func;
関数ポインタの構文を理解するのに苦労しています。
ありがとうございました。
どのコンパイラが 'void(*);'を受け入れますか? –
これはhttps://ideone.com/lEeMY3とhttp://www.cpp.sh/ですが、これはhttp://codepad.org/Zl1UQRa3ではありません。 Visual Studioはstd :: vector宣言/定義でそれを受け入れます。不思議なことに、GCCを使ってEclipseでそれをエラーとしてハイライト表示しますが、コンパイルして実行します。 – Zebrafish
これは、コンパイラのバグや言語拡張、またはその組み合わせのように聞こえます。私は '-pedantic-errors'フラグの有無にかかわらずg ++を試してみることをお勧めします。 Ideoneでは 'int(**);'という文がコンパイルされますが、 'int;'、特に 'int **;'はコンパイルされません。 –