Visual Studio "14" Sharpens Focus on Modern C++
英文原文:Visual Studio "14" Sharpens Focus on Modern C++
Visual Studio “14”的第一个预览版本包含了下一个C++ 11/14 依从性层次将要包含的细节。微软的高级开发人员 Stephen T. Lavavej 就C++14 在 Visual Studio “14”中的支持层次撰文补充了一些额外的细节。
这一工作是针对 VS2013RTM 所做的修改,覆盖了三大类:标准模板库(STL)补充、STL 修正和 STL 的非兼容性修改。值得注意的是,Lavavej 介绍说,“14”中C++ STL 的相关工作主要是 4 位开发者完成的:Lavavej、P.J. Plauger、Artur Laksberg 和 James McNellis。
“14”中对 STL 的补充全部基于已批准的C++14 规范以及 Filesystem V3 这一技术规范:
- N3642 <chrono>/<string> UDLs
- N3644 Null Forward Iterators
- N3654 quoted ()
- N3657 Heterogeneous Associative Lookup
- N3658 integer_sequence
- N3668 exchange ()
- N3670 get<T>()
- N3671 Dual-Range equal ()/is_permutation ()/mismatch ()
- N3779 <complex> UDLs
- N3887 tuple_element_t
- N3940 Filesystem "V3" Technical Specification
解决了十多项C++14 中列出的库问题,还包含了一些对现有 STL 的修正:<chrono>中的 Clock 支持有所改进,<atomic>改进了编译时间校正(不再包含内联 X86 汇编),还有一个从 2006 开始就一直存在于<locale>中的 bug 也被修正了。
生成的目标文件更为高效,而且通常要比 VS2013 生成的小得多。regex 支持上也有很多改进, 修复了一些 bug,并提供了一个更为稳定的实现。
使用 gets ()的开发者应该注意,该函数已经被从C++11 和C++14 中移除,所以在 Visual Studio 中,gets ()将由 CRT(C语言运行时)中的<stdio.h>提供,不会再存在于 STL 的<cstdio>中。
Lavavej 提到,除了这些修改,有些地方的修改破坏了向后兼容性。受影响的地方包括 Filesystem 的 V3 接口带来的修改(与 V2 相比),以及_USE_32_BIT_TIME_T的使用会触发编译器警告。iostreams 中还有一个与其浮点数解析方式有关的已知 bug,开发仍在进行。
如果有意全面了解所有细节,一定要阅读一下 Lavavej 的文章。