大多数编译器已经支持C++0x。您是否开始使用C++0x或正在等待x的定义?我需要对我的代码进行一些重构;我应该开始使用新功能吗?
我已经开始使用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是指他们解决编译器中的错误并将其带入标准兼容性的时间点,无论标准是什么)。
但是对于开发而言?我会用它来玩耍、编写project euler等。我也会在演示和新闻组中使用它。
是的,我已经在使用C++0x并发布了开源库和代码。我的所有未来的C++开源项目都将使用这个变体编写。在使用可变参数模板参数和decltype/auto之后,我无法回到以前的版本!
只有当Visual Studio 完全支持它时,我才会开始使用它。现在,VS10仅支持一些功能。
我们仍在从VS6转换到VS2005的过程中。直到201x年末,我们可能不会完全使用C++0x编译器进行新工作。