首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

30 分鐘掌握 C++11 核心新特性

     編輯:C++ 入門

C++11(原 C++0x)是現代 C++ 里程碑,引入 lambda、類型推導、智能指針、移動語義、線程庫等改變編程範式的特性。本文精選最高頻特性,助你快速上手。

1. auto & decltype:類型推導

auto x = 42;           // int
auto p = new Foo();    // Foo*
auto it = v.begin();   // vector::iterator
decltype(x) y = x;     // int y = x;

// 尾置返回類型配合 decltype
template<typename Creator>
auto make(Creator c) -> decltype(c()) { return c(); }

2. nullptr:類型安全空指針

void f(int); void f(int*);
f(0);       // 調用 f(int) — 二義性
f(nullptr); // 調用 f(int*) — 明確

3. 範圍 for 循環

for (auto& x : vec) x *= 2;
for (const auto& [k, v] : map) { ... } // C++17 結構化綁定

4. Lambda 表達式

[捕獲列表](參數) mutable -> 返回類型 { 函數體 }
int a=1,b=2;
auto f = [=](int x){ return x+a+b; }; // 值捕獲所有
auto g = [&](int x){ a=x; return a; }; // 引用捕獲所有

5. 變參模板

template<typename... Args>
void print(Args... args) { (cout << ... << args) << '\n'; } // C++17 折疊表達式
// C++11 遞歸版
void print() {}
template<typename T, typename... Rest>
void print(T first, Rest... rest) { cout << first << ' '; print(rest...); }

6. 初始化列表統一語法

int a[] = {1,2,3};
vector v{1,2,3};
map m{{1,"a"},{2,"b"}};

7. 右值引用與移動語義

class String {
    char* data;
public:
    String(String&& rhs) noexcept : data(rhs.data) { rhs.data = nullptr; } // 移動構造
    String& operator=(String&& rhs) noexcept { // 移動賦值
        if (this != &rhs) { delete[] data; data = rhs.data; rhs.data = nullptr; }
        return *this;
    }
};

8. 智能指針

unique_ptr p1(new Foo);
shared_ptr p2 = make_shared(); // 推薦
weak_ptr wp = p2; // 打破循環引用

9. 線程庫

thread t([]{ cout << "Hello thread\n"; });
t.join();
mutex m; lock_guard lg(m); // RAII 鎖

進階學習資源

  • 胡健 C++11 系列博客
  • 《C++ Primer 5th》
  • 《Effective Modern C++》
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved