Windows上的C ++ 11

我想知道在C ++ 11中编写软件如何在Windows上工作。 这将是最舒适的(也是最自然的)使用Windows的本地编译器之一 – 我在想这里的Visual Studio 2012 Express或Visual Studio 2013 Express。 在这个问题上我所能find的一切都是

  1. http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx (比较VC10和VC11的C ++ 11function,这似乎是相当糟糕的)
  2. http://blogs.msdn.com/b/vcblog/archive/2013/06/28/c-11-14-stl-features-fixes-and-breaking-changes-in-vs-2013.aspx (不是真的透明,没有给我一个好主意,它有多好)

有没有人有任何经验目前的Visual Studio版本可以如何处理C + + 11? 我真的想开始使用自动,lambdas,可变参数模板,模板别名,初始化列表和右值引用(仅举几个),现在所有其他好东西,但如果Windows可能是一个问题,我可能不得不使用C ++ 03进一步。

另一种可能性似乎是在Windows上安装LLVM和Clang。 我的主要平台是OSX,在该系统上,Clang对C ++ 11的支持非常好。 但是我读到,C ++标准库(libc ++)的LLVM版本在Windows上不能正常工作。 所以LLVM /铛可能不是一个选项。

你对Windows上的C ++ 11开发有什么看法?

谢谢!

作为一名开发人员,我只能给你我的经验,因为我已经在Windows上使用Visual C ++创建了C ++的最前沿,同时还安装了其他几个编译器和IDE(包括在Windows上为Visual创建Clang Studio 2012,2012 CTP和2013 Preview)。 以下是我目前为止的经验(2013年8月13日),基于Herb Sutter的讲话,并且每天都与编译器合作。

快速

运行在Visual Studio / VC ++的相反方向。 对C ++ 11的支持速度很慢,而且与Clang和GCC相比,它们在编译器功能方面正在被压缩。

现在

Visual C ++的C ++ 11(和C ++ 14支持)现在已经超越了绝望。 他们缺乏强大的功能,使得C ++的模板元编程非常好(特别是using表达式)。

  • 使用现在不存在。 我花了数小时的时间把using VC ++的很好的C ++ 11代码移植到一些地方,只是为了让它在某些地方崩溃,或者变得近乎无法维护。

  • 在CTP中的变量支持是非常可怕的,尽管Visual Studio 2013 Preview的编译器版本变得更好了,但对于符合标准(在GCC和Clang中编译正确)的复杂可变参数和模板表达式来说,它仍然相当不好。

  • =delete=default现在几乎已经离开了VC ++; 在有希望的不久的将来,也许它会解决(根据路线图,它应该是“很快”)(我必须明确地为许多简单的类实现r值构造函数,直到8类继承当时我看到GCC和Clang用户用=default免费获得了我所有的显式硬编码工作)。

  • 作为保留(主要是因为Windows操作系统代码和一些二进制兼容性),VC ++中的空基类别选择不起作用。 不要期望你的类层次结构大小或成员布局至少被优化(当包装变量类型时,请注意你在std::tuple排序)。

这是迄今为止我接触到的所有挫折。 它们是可以工作的 – 我必须每天和他们合作 – 但是如果你想要很好的C ++支持,你应该跳转到GCC或者Clang,并且以某种方式使它在你的机器上工作。

未来

如果你真的想要C ++ 11,你将需要等待一年左右,即使Visual Studio 2013的VC ++版本仍然会缺少一些功能(并且不要指望它们是没有bug的)。 对于2013年的VC ++来说,在许多地方仍然会严重缺少std :: move和显式r值支持,当你期望事情能够发挥作用的时候,它会很痛苦。

警告

如果你不是一个功能强大的Vim用户,那么当涉及到可以使用的IDE时(与GDB / GCC或Clang一起使用会很好),你的选择很少。

  • QtCreator很不错,和MinGW一起工作,通常功能齐全,足以完成工作。
  • 崇高的文本可以使用,但你必须编写自己的建筑系统或委托给其他东西。
  • Code :: Blocks的自动完成是不可靠的,行为奇怪,IDE本身感觉很笨重。
  • 日食应该是好的,但我的经验是笨重和奇怪的,有奇怪的输入时滞(尽管8.00 GB i7 Haswell机器使用SSD)。
  • Visual Studio作为一个IDE,非常稳定。 然后将Visual Assist X堆叠在上面,对于C ++编码来说,它的工作非常好。 这是我继续坚持使用它的唯一原因,但是我已经开始学习Vim了,所以当时间到了的时候,我可以完全抛弃Visual Studio。

关于图书馆

VC ++中的库支持相当完整(就像破损的编译器让它们完成一样)。 它有正则表达式,而其他大多数图书馆都不存在或破坏正则表达式的支持。 但是,这并不意味着VC ++ 库可以很好地处理一些C ++ 11的功能 (图片由melak47提供 )。

最后

如果你想让你知道的代码在Windows中工作,100%,那么永恒的剩余时间,你可能会想用VC ++编程。 另一个“好处”是你在VC ++中编写的代码是可以编写的C ++ / C ++ 11的最小子集,所以最终它应该在任何地方编译。 当然,这违背了使用漂亮的C ++ 11并享受它的想法,所以…明智地选择你的毒药。

VC的C ++ 11支持还远远没有完成,但它包含了最重要的面向用户的功能。

而这是另一回事。 根据我的经验,在Windows上安装MinGW或Clang是很好的,但是会有一些不便之处,因为几乎没有人预编译用于Windows的编译器的二进制文件(而许多人为Visual Studio预编译二进制文件)。

另外,据我所知,Windows没有像Visual Studio那样高级的环境,例如图形调试,intellisense和类似的东西。 当我尝试Code :: Blocks时,它实际上并没有工作。

您可以在这里看到对C ++ 11语言特性的编译器支持的全面比较。 这里有一些关于VS的C ++ 11/14路线图的信息。

MSVC是落后于其他主要的C ++编译器,但它仍然得到了许多最重要的功能的支持。

  • 自动,lambdas和右值引用可从VS10。 IIRC有一个关于右值引用的警告,编译器不会生成移动构造和移动赋值运算符。

  • variadic模板和初始化程序列表在VS2013预览中可用,包括库支持。

  • 预期在VS 2013 RTM中可以using类型别名(即using关键字typedef)。


如果您不需要与VS生成的二进制文件进行交互操作,那么安装其他编译器(如GCC)是可行的。 我知道Clang也可以在mingw环境下工作,使用libstdc ++而不是libc ++。

http://nuwen.net/mingw.html

nuwen发行真棒! 这是MinGW,但是比新的GCC版本出来的时候要快得多。 它还附带了所有已编译的boost和其他有用的库。 这是所有我用在窗户上了。

我们使用C ++ 11已经有几个月在windows和linux上的一些here.com产品的生产软件中使用,没有任何问题。 我们使用自动,lambdas,范围为…使用Visual Studio 2012和GCC 4.7。

我一直在使用VS2012,并尽可能使用C ++ 11功能。 在实现中有一些错误,我发现当我从Visual Studio中得到错误进行比较时,有另一个编译器可以帮助。

Clang和GCC在C ++ 11功能支持方面处于领先地位,在C ++ 11支持方面,它似乎是一个“挨门挨户”的竞赛。 MSVC很伤心,试图跟上和落后。 Nuwen MingGW发行版,正如杰克所说,优秀,似乎与Eclipse(开普勒版本)运行良好,我也没有遇到与Netbeans 7.4使用它太多的痛苦。 Nuwen发行版目前在11.2版本,正如你可以在Stephan的网站上看到的 ,现在是64位原生的,具有GCC 4.8.1和Boost 1.54.0,GCC的默认模式也设置为C ++ 11。

我开始越来越多地使用Eclipse Kepler和Nuwen MinGW来优先使用MSVC 2012,但是我主要是一个业余爱好者的C ++程序员,我的脚仍然很潮湿,可能没有碰到那些C ++是那些比较模糊的问题他们的面包和黄油可能知道。