現代C++與Visual Studio
英文原文:Modern C++ and Visual Studio
在微軟的 Build 大會上,Herb Sutter 就現代C++(Modern C++)的當前狀態發表了一場演講。在微軟,過去的幾年里 C++ 的推廣經歷了一次復興,而關注程度的上升,部分是由 Sutter 主導的。
即將發布的C++版本
一開場,Sutter 先總結了 ISO C++ 標準目前到了什么地步。2 月份已經完成了關于C++14 的技術討論,標準委員會目前正在審閱會議記錄,希望今年晚些時候舉行表決,使該標準成為正式的 ISO 標準。
C++14 被看作一個小幅修訂版本,即將到來的C++17 標準(仍然在設計和討論之中)則被看作一個主要版本。微軟最新的編譯器預覽版(CTP)是去年 11 月發布的。Sutter 非常自信,下一個 CTP 版本(發布日期尚未透露)有望包含下列特性:
- User-defined literals
- C++14 generalized lambda capture
- C++14 libs: std:: user-defined literals
- Inline namespaces </ul>
- Universal character names in literals
- noexcept (incl. conditional)
- char16_t, char32_t, attributes
- thread_local
- unrestricted unions
- consexpr (except ctors, literal types)
- constexpr (incl. ctors, literal types) </ul>
- 跨平臺的可移植性和兼容性
- 高性能、完全控制
- 對硬件和操作系統資源完全的訪問權限
- C++語言的亮點:默認的值類型、默認的確定性以及默認的連續性 </ul>
下列特性包含在下一 CTP 版本中的可能性居中(這意味著有可能推遲到更晚的版本中):
并行 STL(對 PPL、TBB、Amp、CUDA 和 Thrust 的聚合)近日將發布在 CodePlex 上。Sutter 宣布,微軟在過去的兩年贊助的 C++ 會議 GoingNative 已經被 CPPCon 取代,該會議計劃于今年 9 月 7 日-12 日舉行。
現代C++ 的使用場景
演講的下一部分,他從版本相關的討論轉到了現代 C++ 在今天的應用開發中的使用場景上。在 Sutter 看來,當存在下列目標或意圖時應該使用C++:
Sutter 指出,現代 C++ 并非C++98——現代 C++ 更為清晰、更為安全,同時保留了快速、靈活的特性。這并不是說不再支持老式的 C++ 了,在很多情況下,盡管編譯器會就代碼如何改進給出一些警告和建議,但是老式的代碼還能通過編譯。
現代 C++ 提供的一個特性就是,使用 make_unique 或 make_shared 替換掉 new,內存管理有所簡化(從程序員的角度看)。不需要 delete,自動化的生命周期管理,而且是異常安全的。
另一個領域是,如何針對 move 操作更高效地處理值類型。C++11 添加了 move 語義。基于這種方法,對于一會就要刪除的副本,我們可以獲得所有權,而不是復制對象。對于遺留代碼,簡單地利用支持C++14 的編譯器重新編譯,即可通過改進的 move 語義提高其速度。
編寫更快的代碼
連續數組非常重要,但是很多人往往領會不到,如果正在訪問很多對象,開發者會非常希望以鄰接的地址順序訪問它們。如果非常關注性能,則要使用數組,而不是鏈表(list)或 arraylist。
繼續這一主題,Sutter 提供了基準測試,表明在進行插入和刪除操作時,向量(vector)比鏈表(list)好得多。預分配的鏈表比普通的鏈表快,但是兩者都比向量慢。
Sutter 的演講信息量很大,而且他還是一位很有魅力的演講者。可以訪問 Channel9查看完整的演講。