歡迎回到 C++ (現代的 C++)

C++ 是其中一種最廣泛使用的程式設計語言在世界上。 編寫完善的 C++ 程式是快速且有效率。 因為您可以用它來建立各種應用程式從有趣吸引力的遊戲,到高效能科學軟體,為裝置驅動程式、內嵌程式和 Windows 用戶端應用程式,這種語言的其他語言彈性。 超過 20, C++ 來解決這類和許多其他的問題。 說明您可能不知道是將編號 C++ 程式設計人員摺疊了昨天過時的 C-Style 程式設計和穿上了現代 C++。

其中一個 C++ 的原始需求與 C 語言的回溯相容性。 即, C++ 會使用類別,然後原始 C++ 語言規格的數個反覆項目 C 位址變更,然後許多後續加強功能。 因此,會產生 C++ 通常稱為多重開發架構的程式語言。 在 C++ 中,您會單純地包含原始指標、陣列、null 結尾字元字串、自訂資料結構和其他功能可能會啟用巨大效能的程序 C-Style 程式設計,但是也可以產生 Bug 和複雜。 由於 C-Style 程式設計填滿這類的危險,其中一個 C++ 的建置目標是讓程式型別安全且容易撰寫,延伸和維護。 在初期, C++ 已接受程式設計開發架構 (例如物件導向程式設計。 多年來,功能加入至語言,以更高的測試的標準資料的結構和演算法。 它是一種現代 C++ 樣式可執行這些動作。

現代 C++ 底線:

  • 而不是堆積或靜態全域範圍的堆疊式範圍。

  • 而不是明確型別名稱的自動型別推斷。

  • 而不是原始指標的智慧型指標。

  • std::string 和 std::wstring 型別 (請參閱 <string>) 而不是未處理的 char[] 陣列。

  • 標準樣板程式庫 (STL) 容器 (如 vector、 list和 map 而不是原始陣列或自訂容器。 請參閱 <vector><list><map>

  • 而非手動STL 演算法。 的程式碼部分。

  • 例外狀況,報告和處理錯誤狀況。

  • 無鎖定使用 STL std::atomic<> 應用程式執行緒通訊 (請參閱 <atomic>) 而非其他執行緒相互溝通機制。

  • 而不是個別進行實作的小型函式的內嵌 lambda 函式

  • 寫入與陣列、STL 容器和 Windows 執行階段 集合搭配使用的格式為 for (for-range-declaration:expression)之更強大的迴圈的範圍架構的 for 迴圈。 這是核心語言支援的一部分。 如需詳細資訊,請參閱以範圍為基礎的 for 陳述式 (C++)

C++ 語言也處理變更。 比較下列程式碼片段。 這種類型顯示項目如何使用在 C++:

// circle and shape are user-defined types
circle* p = new circle( 42 ); 
vector<shape*> v = load_shapes();

for( vector<circle*>::iterator i = v.begin(); i != v.end(); ++i ) {
    if( *i && **i == *p )
        cout << **i << “ is a match\n”;
}

for( vector<circle*>::iterator i = v.begin();
        i != v.end(); ++i ) {
    delete *i; // not exception safe
}

delete p;

這同一件事如何在現代 C++ 中完成:

#include <memory>
#include <vector>
// ...
// circle and shape are user-defined types
auto p = make_shared<circle>( 42 );
vector<shared_ptr<shape>> v = load_shapes();

for_each( begin(v), end(v), [&]( const shared_ptr<shape>& s ) {
    if( s && *s == *p )
        cout << *s << " is a match\n";
} );

在現代,因為您可以使用智慧型指標, C++,您不需要使用新/刪除或明確的例外狀況處理。 當您使用 auto 型別推算和 lambda 函式時,您可以撰寫程式碼更快,增強它,並進一步了解它。 和 for_each 比 for 迴圈是清楚,更容易使用,而且比較不容易未知的錯誤。 您可以使用最少的程式碼使用未定案撰寫應用程式。 您可以進行記憶體安全的程式碼例外狀況和安全,而且未設定/解除配置或錯誤碼處理。

現代 C++ 合併兩種多型:編譯時期,透過樣板,和執行階段,透過繼承和虛擬。 可以混合使用這兩種多型到大的作用。 針對範本 shared_ptr 使用內部虛擬方法完成其資訊清單不會強制型別清除。 當範本是較佳選擇時,,但是請勿過度使用多型的虛擬機器。 樣板可以是非常有用的。

如果遇到 C++ 自其他語言,特別是從大部分型別是參考型別,且非常少量的實值型別的 Managed 語言,請知道預設 C++ 類別是實值型別。 但是,您可以指定其為參考型別啟用支援物件導向程式設計的多型行為。 有用的觀點:實值型別是更多有關記憶體,並設定控制項,參考型別是進一步了解支援多型的基底類別和虛擬函式。 根據預設,每個具有複製建構函式、複製指派運算子的實值型別是可複製它們。 當您指定參考型別,讓類別不可複製停用複製建構函式和複製指派運算子和使用虛擬解構函式,支援多型。 實值型別也是關於內容,,,會複製時,提供您兩個獨立的值可分別修改。 但是,參考型別與識別哪些和種類物件是有時因此指多型型別。

因為電源,再為 K C++ 遇到新生。 像 Java 和 C# 的語言是好,當程式設計人員產能重要時,不過,它們會顯示其限制,當功能與效能是至高無上時。 如需有效和功能,尤其是在限制的硬體裝置,則不會進行現代 C++。

不僅語言是現代的,開發工具是,則也是。 Visual Studio 可讓所有部分開發週期穩固且有效率。 它包括 Application Lifecycle Management (ALM) 工具、IDE 加強功能,像是 IntelliSense 工具易記的機制與 XAML 和建置,以及許多其他工具。

這部分文件中的文章為最重要的功能提供高階方針和寫入現代 C++ 程式的最佳做法和技術。

請參閱

參考

在 C++ 中使用 lambda 運算式

其他資源

C + + 語言參考

標準 C++ 程式庫參考