2
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;
}
4

3 に答える 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 に答える