C++14新特性

C++14新特性

语言特性

二进制字面量

0b110 // 6
0b1111'1111  // 255

通用lambda表达式

参数列表支持auto推导

[](auto& item){item =2;}

lambda捕获初始化器

原本的lambda表达式只能捕获变量,并不能在捕获时进行修改或者初始化。

int func(int i) {return 10 * i;}
auto f = [x = func(2)](){cout << x << endl;}; // x 就是利用func(2)去进行初始化
f(); // 20

返回类型推导

c++14可以使用auto推导返回类型

auto func(int i){
    return 10 * i;
}

decltype(auto)类型声明推导

decltype(auto) 类型指定符也能像 auto 一样推导类型。但是decltype在推导返回类型时会保留其引用类型和const等限定符 ,而 auto 不会。

const int x = 0;
decltype(auto) x1 = x; // x1的类型是const int
int y = 1;
int& y1 = y;
decltype(auto) y2 = y1; // y2的类型是in&

// 用于函数
decltype(auto) func(const int& i){
    return i; // decltype(auto) 推导的就是const int&
}

使用范围更广的constexpr

c++11中,constexpr用于变量类型、using以及单个返回语句。constexpr函数体中只能有一个返回语句,不能有局部变量,不能有控制流语句(如 ifforwhile等),不能有动态内存分配,不能有除基本类型外的任何类型的返回值。c++14中,constexpr函数体中能够有if语句、多重返回、多个返回语句、循环等最常用的语法。

constexpr int factorial(int n){
    if (n < 1) {
        return 1;
    } else {
        return n * factorial(int n - 1);
    }
}
factorial(10); // 比不加修饰constexpr快100ns,300-->200

变量模板化

template<class T>
constexpr T m = T(123);
int main()
{
    cout << m<int> << endl; // 123
    cout << m<double> << endl; // 123
}

[[deprecate]]属性

表明函数要被废弃,可能会产生编译警告,支持自定义编译警告

[[deprecate("this function will be deprecated")]]
int add(){
    return 1;
}

库特性

用户定义字面量的对于标准库类型

chrono库支持使用h,s定义

using namespace std::chrono_literals;
auto day = 24h;

编译时整数序列

主要用于模板元编程

auto m = make_integer_sequence<size_t, 4>();
auto n = make_index_sequence<size_t, 4>();

std::make_unique创建唯一指针

make_unique
posted @   LemHou  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示