你今天如何使用C++11?

29

这是一个有两个部分的问题,第一部分最重要的是涉及现在:

  • 您是否在关注C++11的设计和演进?您关注哪些博客、新闻组、委员会文件和其他资源?
  • 即使您没有使用任何新功能,它们如何影响您目前的选择?
  • 您现在正在使用哪些新功能,无论是在生产中还是其他方面?

第二部分是关于新标准的后续问题:

  • 您是否打算立即使用它?除了前面列出的内容之外,您正在做什么来为C++11做准备?
  • 显然,编译器支持必须存在,但仍需考虑同事、辅助工具和其他因素。什么将最影响您的采用?

编辑:原始问题确实过于争论性;然而,我仍然对基本问题感兴趣,因此我尝试清理它,并希望使其可接受。与其复制,这似乎是一个更好的途径——尽管一些答案回应了争论性,但只要它们回答了问题,它们仍然适用,并且所有答案都是社区财产,需要根据情况进行清理。


3
我不明白coughtconceptscough和任何事情有什么关系。除了部分支持一些早期的草案之外,没有人声称编译器支持它们(除了conceptgcc),也没有人确定它们是否会被包含在内。“auto”完全不同,因为它已经最终确定,得到认可,并且由实际的编译器支持。 - jalf
2
我又遇到了这个问题,尽管我是其中一个关闭它的人,但现在我觉得这是一个有效的问题。(也许是因为编辑或精神上的变化,谁知道呢。)无论如何,虽然可能不会发生,但你应该知道我已经投票重新打开它了。 - GManNickG
1
@GMan:你和其他四个人(包括我自己)显然是这样的 :) - Billy ONeal
15个回答

23

无法猜测有多少人对新的C++0x感兴趣,我很确定所有知道C++并使用它的人都想了解更多关于它的消息。

我从g++实现C++0x开始就开始使用所有新功能。不过只在一些小型不可移植项目中使用。为什么呢?因为有人不断告诉我要忘记C++,完全转向脚本语言来提高代码开发速度和忘记内存管理。然而,我的最佳经验和知识在C++方面。我知道RAII并且每天使用Boost库。现在,新功能让我比以前写得更快。知道rvalues出现后,指针(即使是智能指针)就从代码中消失了。STL算法与lambda表达式非常棒,初始化列表也让我非常开心。auto关键字也很好用。

因此,我现在使用C++0x的主要原因是开发速度更快


13
我不知道关键词能够有情感,更不用说愤怒了。 - jk.
1
英文不是我的母语,写这篇回答的初衷是为了表达我对于C++日益增长的需求的热爱。并无愤怒或对抗之意! - Gramic

16

我今天不使用C++0x,因为它会导致代码的可移植性丧失。因为到目前为止还没有C++0x标准。

回答:
原因:代码可移植性


9
不,因为我使用的编译器没有完全实现它。
等到C++0x发布,并且Visual Studio 2010以及"匹配的"g++也全部发布,我会尽可能使用C++0x。这很有可能,因为我经常启动新项目(我制作游戏)。
虽然我有一个已经存在的代码库,但每次我找到更好的方法来做事情时,它都会发生变化。改变对我来说不是障碍。利用C++0x只是另一种变化。
在较大的代码库中,您会发现不同的意见。有些地方喜欢代码看起来统一,这意味着点缀的C++0x不是选项:它们要么必须转换整个代码库以利用C++0x,要么不能使用它。
其他地方可能鼓励使用C++0x功能,并在闲暇时间尝试修复旧代码以匹配。
而其他地方,比如我,可能会立即想要利用C++0x所提供的所有内容。
答案是:这取决于具体情况。

3
你是否非常看重“完全实现”?你是否感到困扰,因为只有很少(据我所知只有两个)编译器支持98年的导出? - Roger Pate
我不确定我理解你的第一个问题。至于你的第二个问题,不是很确定。这可能很好,但是在头文件中仅使用模板也是一种相当不错的方式。 - GManNickG
1
我认为“第一个问题”只是一条评论,即C++98仍未在最流行的编译器中完全实现,0x也可能不会被实现。 - jalf
2
让我困扰的是,许多编译器都不支持C99。 - Matt Joiner
@GMan:你说“因为它没有完全实现”,所以我试图弄清楚你的意思,因为当前的C++标准也没有被广泛地完全实现,即使在最终实现5-6年后,还有很长的路要走,但我想象你(和我自己以及许多其他人)在那个时候仍然广泛使用C++。 - Roger Pate
1
@Roger:你说得对。我所指的“完全实现”是指符合标准:“可以使用语言或库的任何特定功能”,而我所说的“使用”是指适用于大多数预期情况。(没有编译器能够完全正确地处理它。)这是否是你想要澄清的内容? - GManNickG

6
不,但我很想学,特别是关于lambda功能的部分。

5

编号。

我所有的应用软件都是用Java开发的。所有简单粗暴的代码都是用Python完成的。所有底层工作都是用C完成的。我通常不使用C++(因此它对我没有影响)。

如果我确实使用了C ++,我会像对待C1x一样对待c++0x-我确保我的代码不会出问题,但在标准确定之前,我不会使用新功能。

至于我是否会在标准批准后立即使用新功能,答案是否定的。这个过程将是一个渐进的过程。随着我当前应用程序的维护逐步推出,我可能会添加它,具体取决于预期的好处。

即使是我编写的新应用程序,在考虑使用这些功能之前也需要新语言特性的需求。


哈哈,谁踩了这个家伙的票?至少他对自己使用C++很谦虚。xD - Johannes Schaub - litb
1
上帝啊,对于一个主观和争议性的问题,你为什么要踩任何人呢? - jay_t55
3
在社区 Wiki 回答中,Downvote 往往不是因为回答错误,而更多是因为意见分歧等原因。相比于“普通”回答,这种情况更加普遍。原始回答仅仅写了一个“不”,这也是一些人 Downvote 的原因之一。 - Roger Pate

3

不,我现在大部分时间还在使用VC6 :(,最早要到2020年才会开始使用C++0x(也许我应该换公司?)


3
这是我的答案。我在工作中不认识任何叫Patrick的人,这意味着换公司并不是一件轻而易举的事情... - jmucchiello
8
我从一个使用VC6的公司转到了现在使用VB6的公司,但这并不总是朝着正确方向迈出的一步。 - graham.reeds
@jmucchiello,最近你们那里有没有叫 Graham 的人在工作? - Patrick
2
称vC6为c++编译器就像说Afrikanns只是荷兰语一样。这是有史以来最糟糕的c++实现。你们公司也使用Visual Source Safe吗? - deft_code
5
当然我们使用Visual SourceSafe,除此之外你还能用什么来保护你的源代码呢? - Patrick

3
我正在使用大量的C++0x,特别是可变参数模板和函数、auto和decltype以及右值引用。
虽然在g++ 4.5和Visual Studio 10上可能会有一些乐趣,但这些功能现在已经相当稳定,并且在两个编译器上工作方式相同。
我现在开始的软件项目可能要一年左右才能发布,到那时我预计这些新编译器将成为标准。

2

当我在自己的代码上进行调试时,我可以这样做。

但是当我编写一些人们将在旧编译器上使用的代码时,就不行了。


2

这要看情况。我正在准备在我的硕士论文中使用一些C++0x的特性(尽管迄今为止,我大多数时候仍然使用C++03编译器,等待VS2010b2)。

但我不会在实际的专业生产工作中使用它。对于这种情况,我想要等到标准最终确定,并且至少在MSVC的情况下,直到编译器发布非beta版本。


1
为什么不呢?确切的编译器并不重要,我只需要访问某些C++0x功能。(如果可能的话,当然我也想让它在GCC上运行。) - jalf

1

我正在使用TR1(regex,unordered_map,unordered_set...)和一些boost功能,这些功能将在下一个标准中出现,比如(希望)lexical_cast... 不仅仅是今天,每天都在使用 :)


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