std::thread f()
{
void some_function(); // <- here
return std::thread(some_function);
}
std::thread g()
{
void some_other_function(int); // <- here
std::thread t(some_other_function,42);
return t;
}
3 に答える
4
次のような行:
void some_function();
後で定義する関数を宣言するだけです。関数は、必ずしも関数スコープの外で宣言する必要はありません。
于 2010-09-15T02:21:19.583 に答える
1
ご想像のとおり、これは単なる関数宣言です。関数宣言をヘッダー ファイルに入れることは一般的 (かつ推奨) ですが、これは決して必須ではありません。それらは関数本体にある場合があります。
于 2010-09-15T02:20:58.097 に答える
1
thread
オブジェクトを返す関数を定義します。
std::thread f()
{
extern
引数を返さない関数を宣言しますvoid
(通常、これはローカル スコープでは行われませんが、有効です)。
void some_function();
その関数を実行するスレッドを開始し、それにハンドルを返します。
return std::thread(some_function);
}
以前と同じ取引:
std::thread g()
{
void some_other_function(int);
しかし、これは有効ではありません。スレッドのコピーを作成することはできないため、技術的には、ローカルthread
オブジェクトを作成してから返すことはできません。これがコンパイルされた場合は驚くでしょうが、コンパイルされた場合、デバッガー用にビルドすると壊れる可能性があります。
std::thread t(some_other_function,42);
return t;
}
ただし、これは機能します。
return std::move( t );
于 2010-09-15T02:22:18.460 に答える