C++整理20_C++11新特性

hwaityd發表於2024-10-20

C++11 新特性

C++11引入了許多新特性,旨在提高語言的表達力、效率和安全性。以下是一些主要的新特性及其用法。

1. 空指標:nullptr

概念nullptr是一個更好的空指標常量,型別安全且可移植。
原理:它替代了傳統的NULL0,提供了對空指標的明確語義。
用法:使用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. 自動型別推導:autodecltype

概念autodecltype關鍵字允許編譯器自動推導變數型別。
原理auto讓編譯器根據初始化表示式來推導型別,而decltype推導表示式的型別。
用法:使用autodecltype宣告變數,編譯器會自動確定其型別。

案例程式碼

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_ptrunique_ptrweak_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++程式設計更加現代、安全和便捷。透過使用這些特性,開發者可以編寫出更簡潔、更高效和更健壯的程式碼。

相關文章