今日(func
はint
のparamで宣言されましたが、int*
はstd::thread
コンストラクタの二番目のparamとして渡された):このC++型の解釈方法は?私は、次の不正なコードの断片を手伝った
#include <thread>
void func(int);
int* ptr;
void start()
{
std::thread t = std::thread(func, ptr);
}
私はGCC 5.3.0でこれをコンパイルしようとすると、それは、次のタイプのエラーメッセージが印刷された:
class std::result_of<void (*(int*))(int)>
今、私はclass std::result_of<>
にパラメータとして渡されたタイプをどのように解釈するかを疑問に思います。これは関数へのポインタ(この場合はvoid(*)(int)
)と似ていますが、角括弧内に別の文字の後に(int*)
が追加されています。どのようにこのタイプを解釈するのですか?
'func'が' int'を必要とする場合、なぜあなたは 'int *'を渡していますか? – NathanOliver
これは私が今日見たコードの誤りです - おそらくこれはタイプミスでした。 –
同様の記述は[cdeclに従う](http://cdecl.ridiculousfish.com/?q=void+%28*f%28int*%29%29%28int%29)を与えます。 – ArchbishopOfBanterbury