C++11 新特性
C++11引入了許多新特性,旨在提高語言的表達力、效率和安全性。以下是一些主要的新特性及其用法。
1. 空指標:nullptr
概念:nullptr
是一個更好的空指標常量,型別安全且可移植。
原理:它替代了傳統的NULL
和0
,提供了對空指標的明確語義。
用法:使用nullptr
來表示空指標。
案例程式碼:
int* ptr = nullptr;
if (ptr == nullptr) {
// ptr 是空指標
}
2. final
關鍵字
概念:final
修飾符阻止類或成員函式被繼承或重寫。
原理:它提供了一種方式來封印類或函式,確保它們不會被進一步修改。
用法:在類或虛擬函式前使用final
關鍵字。
案例程式碼:
class Base {
public:
virtual void func() = 0;
};
class Derived final : public Base {
public:
void func() override {
// 實現
}
};
// Derived類不能被繼承,func不能被重寫
3. 自動型別推導:auto
和 decltype
概念:auto
和decltype
關鍵字允許編譯器自動推導變數型別。
原理:auto
讓編譯器根據初始化表示式來推導型別,而decltype
推導表示式的型別。
用法:使用auto
或decltype
宣告變數,編譯器會自動確定其型別。
案例程式碼:
auto x = 42; // int
auto y = 3.14; // double
auto z = "hello"; // const char[6]
decltype(auto) str = "world"; // const char*
4. 序列for
迴圈
概念:基於範圍的for
迴圈提供了一種簡潔的方式來遍歷容器和陣列。
原理:它自動為容器中的每個元素建立迭代器。
用法:使用for
迴圈,後跟auto
和範圍。
案例程式碼:
vector<int> vec = {1, 2, 3, 4, 5};
for (auto it : vec) {
cout << it << " ";
}
cout << endl;
5. 右值引用:
概念:右值引用是繫結到右值(臨時物件)的引用。
原理:它允許資源的轉移,如透過移動語義來避免不必要的複製。
用法:使用&&
宣告右值引用。
案例程式碼:
vector<int> createVector() {
return vector<int>(100);
}
void processVector(vector<int>& vec) {
// 處理vec
}
int main() {
auto vec = createVector();
processVector(move(vec)); // 使用右值引用來移動vec
}
6. 智慧指標
概念:智慧指標是管理動態分配記憶體的模板類。
原理:它們包含引用計數器,並在不再有指標指向物件時自動釋放記憶體。
用法:使用shared_ptr
、unique_ptr
和weak_ptr
來管理資源。
案例程式碼:
#include <memory>
shared_ptr<int> ptr1(new int(10)); // 共享指標
unique_ptr<int> ptr2(new int(20)); // 獨佔指標
shared_ptr<int> ptr3 = ptr1; // 增加引用計數
cout << *ptr1 << endl; // 輸出 10
ptr1.reset(); // 減少引用計數,如果計數為0,則釋放記憶體
C++11的這些新特性極大地增強了語言的能力,使得C++程式設計更加現代、安全和便捷。透過使用這些特性,開發者可以編寫出更簡潔、更高效和更健壯的程式碼。