我正在尝试使用C++ 0x线程,部分在gcc 4.5中实现,我遇到了一个问题,我无法理解.我们来看看这段代码吧
#include <future>
#include <iostream>
int main()
{
std::cout << std::async([]() { return 10; }).get() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它很简单,应该可以工作,但事实并非如此.它抛出std :: system_error
在抛出'std :: system_error'的实例后调用终止what():Aborted
what()返回空字符串,因此根本没有错误信息.更重要的是,它没有使用在线编译器,它也使用gcc 4.5,但现在它可以正常工作.你可以在http://liveworkspace.org/code/f3003d62a758e047a880920c84f1241c看到它, 但昨天它抛出相同的异常(但是,服务器上没有进行任何更改).你知道这是什么问题吗?
谢谢.
我试图找到关于模板关键字的任何信息用作消除歧义,但没有任何相关信息.可能我正在搜索错误的关键字,但标准中没有.template或 - >模板.谷歌只显示来自不同论坛的GCC问题,但没有真正解释它用于什么.
第11行(在GCC上)没有模板关键字编译的代码无法编译,但我不太确定这是否符合标准.
template<typename B>
struct S1
{
template<typename T> void test() {}
};
template<typename T>
struct S2
{
S2()
{
S1<T>().template test<int>();
}
};
int main()
{
S2<int>();
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:为什么这里使用了模板关键字,没有那个关键字会有什么样的歧义?我在哪里可以阅读(我非常感谢链接到标准).
谢谢.
我正在尝试C++ 0x支持,并且存在一个问题,我想不应该存在.要么我不明白这个主题,要么gcc有一个bug.
我有以下代码,最初x并且y是相同的.线程1始终x先递增,然后递增y.两者都是原子整数值,因此根本没有增量问题.线程2正在检查是否x小于y,如果是,则显示错误消息.
这段代码有时会失败,但为什么呢?这里的问题可能是内存重新排序,但默认情况下所有原子操作都是顺序一致的,我没有明确放松那些操作.我正在x86上编译这段代码,据我所知,该代码不应该有任何订购问题.你能解释一下问题是什么吗?
#include <iostream>
#include <atomic>
#include <thread>
std::atomic_int x;
std::atomic_int y;
void f1()
{
while (true)
{
++x;
++y;
}
}
void f2()
{
while (true)
{
if (x < y)
{
std::cout << "error" << std::endl;
}
}
}
int main()
{
x = 0;
y = 0;
std::thread t1(f1);
std::thread t2(f2);
t1.join();
t2.join();
}
Run Code Online (Sandbox Code Playgroud)
结果可以在这里查看.
我正在寻找一个设计精良,高效且强大的C++跨数据库和跨平台数据库通信库.我需要支持
当我说跨平台时,我的意思是跨平台,我需要类似于提升的东西.
目前我正在研究社会,但是
目前我正在使用Qt,但我不喜欢仅将Qt用于数据库通信,而没有使用其他Qt功能.这是一个临时解决方案,我正在寻找替代品.
你用的是哪些图书馆?你能推荐什么?如果您知道任何非常好且可移植的Oracle通信库也可以接受,但首选跨数据库.
谢谢.