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 </ol>
解決了十多項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 的文章。