大多数编译器已经支持 C++0x。你是开始使用 C++0x 还是在等待 x 的定义?我必须对我的代码进行一些重构;我应该开始使用新功能吗?
9 回答
C++0x 还不是一个完整的标准。在发布国际公认标准之前,可能会有很多修订。所以这一切都取决于,你写代码是为了什么?如果是为了工作任务,我会坚持使用常规的 C++,等待标准被设置,并给编程社区调整所需的时间。不要重构你真正需要实现的代码,它可能会给你带来很多麻烦。
然而,我认为 C++0x 非常适合使用,而且当 0x 被全球接受时,熟悉语法也无妨。
我已经开始使用nullptr
,#define nullptr 0
用于那些还不支持它的编译器(即大多数)。
很少有编译器支持某些东西。实际上 VS 只支持 TR1 库,gcc 支持一些特性,如可变参数模板、右值、自动等等。英特尔编译器有一些。
我主要开始使用可变参数模板,例如:
#ifdef HAvE_VARIADIC
template<typename... Args>
void format(std::string,Args... args);
#else
template<typename T1>
void format(std::string,T1 p1);
template<typename T1,typename T2,>
void format(std::string,T1 p1,T2 p2);
...
template<typename T1,typename T2,...,typename T10>
void format(std::string,T1 p1,T2 p2,..., T10 p10);
#endif
我会推迟编写生产代码,直到 '0x+y,y 是他们从编译器中处理错误并将其纳入标准兼容性(无论标准可能是什么)。
但是为了发展?我用它来玩,写项目 euler等等。我也用它来做演示和新闻组。
我们经常使用 c++0x,现在当 gcc 支持某些功能时,我们将在它们可用时立即使用它们。原因很简单 - 使用 auto 关键字可以节省大量输入,使用右值引用可以获得性能提升,使用初始化列表和可变参数模板可以减少输入并提高代码的可读性。
实际上,c++0x 标准的主要目标也是我们的目标,因为我们将通过这些特性对我们的竞争对手有优势。这就是为什么我们不用等待就可以使用它们的原因。当然如果需要多平台兼容,这一步是不行的。万一你不在乎,立即使用它,你只能赢。
是的,我已经在使用 C++0x 并发布开源库和代码。我未来所有的 C++ 开源项目都将使用这个变体编写。使用可变参数模板参数和 decltype/auto 后,我无法返回!
We are still in the process of switching from VS6 to VS 2005. We probably wont be using exclusively C++0x compilers for new work until late 201x.
当 Visual Studio完全支持它时,我将开始使用它。目前 VS10 只支持一些功能。