一、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/n/248734.html