【发布时间】:2011-02-09 11:45:55
【问题描述】:
虽然有人说g++中对c++0x新特性的支持处于实验模式,但许多gcc开发者声称你可以在你的代码中使用大部分新特性并让程序运行。
但是当我尝试编译这个简单的程序时,它会导致分段错误。为什么?
#include <thread>
#include <iostream>
void my_thread_func()
{
std::cout<<"hello"<<std::endl;
}
int main()
{
std::thread t(my_thread_func);
t.join();
}
g++ -std=c++0x -Wall -o run main.cc
【问题讨论】:
-
你用的是什么版本的gcc?
-
作为一个没有沉浸在 C++ 中的人,线程对象通过构造隐式启动的方式令人惊讶:-)
-
我正在检查 Microsoft VS 2010 中的 C++0x 功能。它们支持以下几种功能:自动关键字和类型推断、lambdas、decltype()、nullptr、用于在线程之间传递异常的 exception_ptr、static_assert ()、右值引用和移动构造函数/赋值运算符和完美转发。还有模板类 std::unique_ptr、std::shared_ptr 和其他相关的。但是,尚不支持#include
和 std::thread。这是非常令人失望的,因为使用 C++0x 标准在 VC2010 和 g++ 上编写可移植线程代码本来会很好。