你已经开始使用C++0x了吗?

5

大多数编译器已经支持C++0x。您是否开始使用C++0x或正在等待x的定义?我需要对我的代码进行一些重构;我应该开始使用新功能吗?


13
目前还没有任何编译器完全支持C++0x。几个编译器已经实现了C++0x的一部分功能,但远远不是全部。而且,标准甚至还没有完成,可能会有所改变。 - Adam Rosenfield
1
他们的时间不多了,否则就必须将其重命名为C++1x。 - T.E.D.
5
如果延迟的话,它将是C++0a。 - James Hopkin
9个回答

8
C++0x目前还不是一个完整的标准。在国际接受的标准发布之前,可能会有很多修订。因此,一切取决于你写代码的目的是什么。如果是为了工作任务,我建议坚持使用普通的C ++,等待标准的制定,并给编程社区适应的时间。不要重构你真正需要实现的代码,这可能会给你带来很多麻烦。
然而,我认为C++0x非常适合用来玩耍,当0x被全球接受时,熟悉语法也无妨。

3
计划是在今年年底左右发布标准,预计不会有太多修订。他们已经制定出了一份草案,并进行了一两次修改。今年晚些时候,他们将提交国际标准化组织进行投票,在那里预计能够顺利通过。 - jalf

4

我已经开始使用nullptr,对于那些还不支持的编译器(即大多数),使用#define nullptr 0


4
从您提供的链接来看,您实际上是指TR1,而不是C++0x。是的,我已经使用了大部分新的TR1库相当长的时间,因为其中许多库以前都是Boost库。我只能鼓励每个人也使用它们。

3

很少有编译器支持某些功能。实际上,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

3

在编写生产代码之前,我建议先等待'0x+y(其中y是指他们解决编译器中的错误并将其带入标准兼容性的时间点,无论标准是什么)。

但是对于开发而言?我会用它来玩耍、编写project euler等。我也会在演示和新闻组中使用它。


2

是的,我已经在使用C++0x并发布了开源库和代码。我的所有未来的C++开源项目都将使用这个变体编写。在使用可变参数模板参数和decltype/auto之后,我无法回到以前的版本!


2
我们已经深入研究了c++0x,并且现在当gcc支持其中一些特性时,我们将尽快使用它们。原因很简单——使用auto关键字可以节省大量输入,使用右值引用可以提高性能,使用初始化列表和可变模板可以减少输入并使代码更易读。
实际上,c++0x标准的主要目标也是我们的目标,因为这些特性让我们比竞争对手更有优势。这就是为什么我们不会等待,而是立即使用它们。当然,如果您需要多平台兼容性,则此步骤是不可接受的。如果您不介意,请立即使用,您只会获胜。

1

只有当Visual Studio 完全支持它时,我才会开始使用它。现在,VS10仅支持一些功能。


我也曾经这样想过。但是等待完全实现可能需要很长时间(我的意见是这将需要数年时间,也许会有一些罕见的小功能在某些编译器中永远不会被实现!)。因此,我将使用所有涉及编译器中可用的功能。(不幸的是,我们必须在嵌入式开发中使用GCC 3.4.5 :-((() - mmmmmmmm

1

我们仍在从VS6转换到VS2005的过程中。直到201x年末,我们可能不会完全使用C++0x编译器进行新工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接