この C++ コード (clang のブロック言語拡張を使用) を想像してみてください。
auto now = std::chrono::system_clock::now();
std::async(^ {
auto time = now;
// ...
});
の型は何になりますtime
か?decltype(now)
それともdecltype(now)&
?_ 後者の場合、ブロックが実行される前にコピーされていることを確認するにはどうすればよいですか?
この C++ コード (clang のブロック言語拡張を使用) を想像してみてください。
auto now = std::chrono::system_clock::now();
std::async(^ {
auto time = now;
// ...
});
の型は何になりますtime
か?decltype(now)
それともdecltype(now)&
?_ 後者の場合、ブロックが実行される前にコピーされていることを確認するにはどうすればよいですか?
オブジェクトがコピーされ、ブロック言語の仕様decltype(now)
に従って、その型は になります。
スタック ローカル オブジェクトは、copy const コンストラクターを介して Block にコピーされます。そのようなコンストラクターが存在しない場合、Block 複合ステートメント内からそのようなオブジェクトを参照することはエラーと見なされます。