我正在尝试让我的模拟在我们的高性能服务器上运行。它(不幸的是)使用 CentOS Linux 版本 7.7.1908(核心)而不是我正在开发程序的 Win10。随之而来的是大量错误,其中一个我无法修复:
#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;
}
当在 Win10 下使用“cl test.cpp”编译此文件时,输出看起来像我期望的那样:
桌面>测试.exe
初始化我
构建的承诺
设定值
检索未来
获得价值:1234
另一方面,当使用“g++ -std=c++11 test.cpp”在服务器上编译时,输出有所不同:
〜/ test_dir $ ./a.out
初始化我
构建的承诺
抛出“std::system_error”实例后调用终止
什么():未知错误-1
Aborted
在使用 Ubuntu 16.04.6 LTS 机器尝试此操作时,我确实遇到了同样的错误。我不明白为什么会发生这种情况。
显然,这一行有可疑之处:promise.set_value(std::move(i))
因为打印之前的输出并且该语句之后的行不再执行。此外,编译器/链接器确实找到了两个版本“void set_value (const T& val);”之一。或“void set_value (T&& val);”这对于模板规范“int”是合适的,我强烈怀疑后者。
但是为什么当设置一个整数作为 Promise 的值时程序会中止呢?即使内联值并一起跳过变量也会产生错误。
有人能指出我的错误在哪里吗?
尝试使用编译pthread
flag:
g++ -std=c++11 test.cpp -pthread
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)