在这里挠头。在下面的代码,则该函数f在3种不同的方式通过使用task_lambda(),task_bind()和task_thread()。在main()但是,只有功能task_lambda()和task_bind()实际调用和执行。但是,如果您敢于取消注释#if 0代码块,以使未使用的功能task_thread()不再存在于代码中,则main中的代码现在将引发异常(-1)system_error。
这是代码:
#include <iostream>
#include <cmath>
#include <thread>
#include <future>
#include <functional>
#include <unistd.h>
// unique function to avoid disambiguating the std::pow overload set
int f(int x, int y) { return std::pow(x,y); }
void task_lambda()
{
std::packaged_task<int(int,int)> task([](int a, int b) {
return std::pow(a, b);
});
std::future<int> result = task.get_future();
task(2, 9);
std::cout << "task_lambda:\t" << result.get() << '\n';
}
void …Run Code Online (Sandbox Code Playgroud) c++ ×1