3
VS2015の下のコードでは、最初の行にacefbd
が表示されていますが、これは正しいです。私が個々の行に分けている2番目のテストでは、出力はabcdef
です。VS2015 std :: async strange
これは意図した動作ですか?
#include <future>
#include <iostream>
using namespace std;
void a() {
std::cout << "a";
std::this_thread::sleep_for (std::chrono::seconds (3));
std::cout << "b";
}
void c() {
std::cout << "c";
std::this_thread::sleep_for (std::chrono::seconds (4));
std::cout << "d";
}
void e() {
std::cout << "e";
std::this_thread::sleep_for (std::chrono::seconds (2));
std::cout << "f";
}
int main()
{
std::async (std::launch::async, a), std::async (std::launch::async, c), std::async (std::launch::async, e);
cout << "\n2nd Test" << endl;
std::async (std::launch::async, a);
std::async (std::launch::async, c);
std::async (std::launch::async, e);
}
知っていますか?それは実装定義ですか? – Rakete1111
@ Rakete1111コンマ式を使った最初のテストを意味すると思いますか?それで、仕様を見ていなくても、わかりません。 –
@ Rakete1111一時的なものは、同じ完全表現内の構造の逆の順序で破棄されます。参照にバインドされているために寿命が延長されているものを除きます。 (これらはそうではありません)。 –