一、constexpr函數
C++14中,constexpr函數更加強大。在C++11中,constexpr僅允許在一個constexpr函數中執行非遞歸計算。C++14中,我們可以遞歸地在constexpr函數中執行計算。這意味著我們可以定義遞歸constexpr函數了。
比如,我們可以使用遞歸constexpr函數來計算斐波那契數列:
constexpr int fibonacci(int n){
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
constexpr int result = fibonacci(10); // 編譯期計算
二、泛型Lambda表達式
C++14引入了泛型Lambda,這意味著我們可以編寫更加通用的Lambda表達式。
比如,我們可以使用泛型Lambda來實現函數對象的排序:
std::vector<int> vec{1, 3, 2, 5, 4};
std::sort(vec.begin(), vec.end(), [](const auto& lhs, const auto& rhs){
return lhs < rhs;
});
這裡使用了「auto」類型推導,使得Lambda表達式能夠接受不同類型的參數,並且可以在函數體中對這些參數進行通用的操作。
三、變長參數模板
在C++14中,我們可以使用變長參數模板來傳遞任意數量、任意類型的參數。
比如,我們可以實現一個通用的「print」函數:
template <typename... Args>
void print(const Args&... args){
(std::cout << ... << args) << std::endl;
}
// 調用示例
print(1, "hello", 3.14);
我們可以在編寫print函數的時候,將其參數類型設為「Args…」,這樣就可以接受任意數量的參數。
四、make_unique函數
在C++14中,標準庫新增了一個函數模板「make_unique」,它可以用來創建一個unique_ptr對象。
比如,我們可以使用make_unique函數來創建一個動態分配的int數組:
auto arr = std::make_unique<int[]>(10); // 創建長度為10的int數組
arr[0] = 1;
arr[1] = 2;
// ...
arr[9] = 10;
使用make_unique函數來創建unique_ptr對象,可以簡化代碼,並且避免了內存泄露的風險。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/248734.html