我只能给你我作为开发人员的经验,因为我一直在使用 Visual C++ 在 Windows 上构建最前沿的 C++ 几乎所有东西,同时还安装了几个其他编译器和 IDE(包括我自己在 Windows 上构建 Clang for Visual Studio 2012、2012 CTP 和 2013 预览版)。以下是我截至目前(2013 年 8 月 13 日)的经验,基于Herb Sutter 的谈话以及每天使用编译器的工作。
快速
在 Visual Studio / VC++ 的相反方向运行。对 C++11 的支持速度很慢,而且它们目前在编译器功能方面与 Clang 和 GCC 相比被压垮了。
现在
Visual C++ 的 C++11(和 C++14 支持)现在已经非常糟糕了。它们缺乏使 C++ 中的模板元编程非常棒的强大功能(using
尤其是表达式)。
使用现在不存在。我花了好几个小时将出色的 C++11 代码移植using
到 VC++ 上,结果却让它在某些地方损坏、卡住,或者变得几乎无法维护。
CTP 中的可变参数支持非常糟糕,虽然它在 Visual Studio 2013 Preview 的编译器版本中变得更好,但它在遵循标准的复杂可变参数和模板表达式方面仍然相当糟糕(并且在 GCC 和 Clang 中编译良好)。
=delete
现在=default
几乎从 VC++ 中消失了;在充满希望的不久的将来,也许它会成功(根据路线图,它应该“很快”)(我必须为许多简单的类显式实现 r 值构造函数,一直到 8 类继承当我看到 GCC 和 Clang 用户使用 ) 免费获得我所有明确的硬编码工作时,这是最糟糕的一记耳光=default
。
作为保留(主要是因为 Windows 操作系统代码和一些二进制兼容性),VC++ 中的 Empty-Base-Class-Optomizations 不起作用。不要期望您的类层次结构大小或成员布局至少得到优化(在std::tuple
打包变量类型时注意您的排序)。
这就是我迄今为止接触到的所有挫败感。它们是可行的——我每天都必须和它们一起工作——但是如果你想要很好的 C++ 支持,你应该跳入 GCC 或 Clang 并以某种方式让它在你的机器上工作。
未来
如果你真的想要 C++11,你将需要等待大约一年,即便如此,Visual Studio 2013 的 VC++ 版本仍然会缺少一些功能(并且不要期望它们也没有错误)。2013 年的 VC++ 在许多地方仍然严重缺少 std::move 和明确的 r-value 支持,当您期望事情正常时会很痛苦。
警告
如果您不是一个强大的 Vim 用户,那么在您可以使用的 IDE(与 GDB/GCC 或 Clang 配合得很好)方面,您的选择会很少。
- QtCreator 很好,可以与 MinGW 一起使用,并且通常功能齐全,足以完成工作。
- 可以使用 Sublime Text,但您必须编写自己的构建系统或将其委托给其他东西。
- Code::Blocks 的自动完成功能很不稳定,行为也很奇怪,而且 IDE 本身也很笨拙。
- Eclipse 应该很好,但我对它的体验既笨拙又奇怪,有时输入滞后很奇怪(尽管使用 SSD 的 8.00 GB i7 Haswell 机器)。
- 作为 IDE,Visual Studio 非常可靠。然后将 Visual Assist X 堆叠在顶部,它非常适合 C++ 编码。这确实是我继续坚持下去的唯一原因,但我已经在学习 Vim 方面取得了进展,所以到时候我基本上可以完全放弃 Visual Studio。
关于图书馆
VC++ 中的库支持非常完整(因为它们损坏的编译器让它们变得完整)。它具有正则表达式,而大多数其他库不存在或损坏正则表达式支持。但这并不意味着 VC++库与它所说的某些 C++11 功能配合得很好(图片来自melak47)。
最后
如果您希望代码能够在 Windows 中 100% 持续工作,那么您可能需要针对 VC++ 进行编程。另一个“好处”是您在 VC++ 中编写的代码是您可以编写的 C++/C++11 的最小子集,因此最终它应该可以在任何地方编译。当然,这与使用漂亮的 C++11 并享受它的想法背道而驰,所以……明智地选择你的毒药。