一、auto關鍵字的使用
auto關鍵字的使用是C++11最受歡迎的新特性之一。使用auto關鍵字可以自動推斷變量的類型,這樣大大減少了代碼的冗餘。例如:
auto i = 1; // 推斷為int型 auto d = 1.0; // 推斷為double型 auto str = "hello world"; // 推斷為const char*型
使用auto關鍵字可以讓代碼更加簡潔明了,並且可以減少類型錯誤的發生。
二、nullptr關鍵字的引入
在C++11之前,我們常常使用0或者NULL表示空指針。但是0或者NULL既不是指針類型,也不是整形類型,這就會導致一些問題。C++11引入了一個新的關鍵字nullptr,表示空指針。例如:
void func(int* ptr) { // do something } int main() { int* p = nullptr; // 初始化為nullptr func(nullptr); // 調用函數時可以傳nullptr return 0; }
nullptr關鍵字用於表示空指針,這樣可以更加明確地表示代碼的意圖。
三、lambda表達式的使用
lambda表達式是C++11最強大的新特性之一。它可以讓我們以更加簡潔的方式編寫函數對象,並且可以讓代碼更加靈活。例如:
#include #include #include int main() { std::vector v = {1, 2, 3, 4, 5}; int count = 0; std::for_each(v.begin(), v.end(), [&count](int x) { if (x % 2 == 0) count++; }); std::cout << "v中偶數的個數為:" << count << std::endl; return 0; }
lambda表達式可以看做是一種匿名函數,它可以捕獲外部變量,並且可以在函數體內使用。因此,lambda表達式可以很方便地用於函數對象的編寫。
四、constexpr關鍵字的使用
constexpr關鍵字用於修飾常量表達式。在C++11之前,常量表達式只能使用常量值,而constexpr關鍵字可以讓我們在編譯時計算常量表達式,並且可以將其存儲在只讀存儲區域中。例如:
constexpr int factorial(int n) { return n <= 1 ? 1 : n * factorial(n - 1); } int main() { constexpr int n = 5; constexpr int fact = factorial(n); static_assert(fact == 120, "factorial error"); return 0; }
constexpr關鍵字通常用於優化程序的運行速度和內存佔用,並且可以提高程序的可讀性。
五、智能指針的使用
在C++11之前,我們通常使用裸指針來管理動態內存,這樣容易導致內存泄漏和空懸指針等問題。C++11引入了std::unique_ptr和std::shared_ptr兩種智能指針,可以很好地解決這些問題。例如:
#include #include int main() { std::unique_ptr uptr(new int(10)); std::cout << *uptr << std::endl; // 輸出10 std::unique_ptr uptr2 = std::move(uptr); std::cout << *uptr2 << std::endl; // 輸出10 return 0; }
智能指針可以自動釋放動態內存,並且可以避免內存泄漏和空懸指針等問題。其中,std::unique_ptr是獨享所有權的智能指針,std::shared_ptr是共享所有權的智能指針。
原創文章,作者:ROTRG,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/372808.html