C++ C++;在linux下,promise.set_值失败,出现未知错误
我正在尝试让我的模拟在我们的高性能服务器上运行。不幸的是,它使用的是CentOS Linux 7.7.1908版(Core),而不是Win10,我正在Win10下开发该程序。随之而来的是大量错误,其中一个我无法解决:C++ C++;在linux下,promise.set_值失败,出现未知错误,c++,c++11,future,C++,C++11,Future,我正在尝试让我的模拟在我们的高性能服务器上运行。不幸的是,它使用的是CentOS Linux 7.7.1908版(Core),而不是Win10,我正在Win10下开发该程序。随之而来的是大量错误,其中一个我无法解决: #include <future> #include <iostream> int main(int argument_count, char** arguments) { int i = 1234; std::cout <<
#include <future>
#include <iostream>
int main(int argument_count, char** arguments) {
int i = 1234;
std::cout << "Initialized i" << std::endl;
std::promise<int> promise;
std::cout << "Constructed promise" << std::endl;
promise.set_value(std::move(i));
std::cout << "Set value" << std::endl;
std::future<int> future = std::move(promise.get_future());
std::cout << "Retrieved future" << std::endl;
int j = std::move(future.get());
std::cout << "Got value: " << j << std::endl;
return 0;
}
#包括
#包括
int main(int参数\ u计数,字符**参数){
int i=1234;
std::cout尝试使用pthread
标志编译:
g++-std=c++11 test.cpp-pthread
尝试使用pthread
标志编译:
g++-std=c++11 test.cpp-pthread
解决了这个问题。你能详细说明一下吗?为什么纯标准行为必须包含非标准编译器标志?据我所知,这向编译器/链接器建议,在程序中使用多线程,因此pthread库y是必需的。如果此标志不存在,为什么编译时不会出现错误?这是因为gthreads是围绕pthreads的抽象层,std::thread只知道线程在运行时不可用的时间。此外,编译(更不用说链接了)进程不是由C++标准覆盖的,不方便,是的,但应该知道,也可以违反直觉。你必须理解, <代码>使用 <代码>这是C++标准中定义的一个相对高的抽象级别。然而,如何实现代码> >代码>取决于OS,即库M。可以不同。如果您的问题得到解决,您能将响应标记为已接受吗?这解决了问题。您能详细说明一下吗?为什么必须为纯标准行为包含非标准编译器标志?据我所知,这向编译器/链接器建议,在程序中使用多线程功能因此pthread库ist是必需的。如果该标志不存在,为什么编译时不会出现错误?这是因为gthreads是围绕pthreads的抽象层,std::thread只知道线程在运行时不可用的时间。此外,编译(更不用说链接)进程不是由C++标准覆盖的,不方便,是的,但应该知道,也可以违反直觉。你必须理解, <代码>使用 <代码>这是C++标准中定义的一个相对高的抽象级别。然而,如何实现代码> >代码>取决于OS,即库M。可以。如果您的问题得到解决,您能否将响应标记为已接受?