c++14学习之新语言功能特性

c++14新语言功能特性学习记录

1.变量模板

变量模板定义一族变量或静态数据成员。在c++14之前只有函数模板和类模板,c++14提供了变量模板:

template<class T>
constexpr T pi = T(3.1415926535897932385L); //变量模板

template<class T>
T circular_area(T r)//
{
    return pi<T> * r *r; //pi<T>是变量模板实例化
}


int main()
{
    cout << "C++ 标准版本:" << __cplusplus << endl;
    double a = 5;
    float b = 5;
    cout << circular_area(a) << endl;
    cout << circular_area(5) << endl;
    cout << circular_area(b) << endl;
    cout << circular_area<double>(5) << endl;
    cout << circular_area<float>(5) << endl;
    cout << circular_area<int>(5) << endl;
    return 0;
}

运行结果:

2.泛型 lambda

在c++11中,lambda表达式的形参需要被声明为具体的类型。而在c++14中放宽了这一要求,这就可以使用类型说明符auto作为表达式的形参声明,从而达到泛型lambda的目的。

int main()
{
    cout << "C++ 标准版本:" << __cplusplus << endl;
    auto lambda_int = [](int x, int y) {return x + y;};         //c++11
    cout << lambda_int(2, 5) << endl;
    auto lambda_float = [](float x, float y) {return x + y;};   //c++11
    cout << lambda_float(2.3, 5.9) << endl;

    auto lambda = [](auto x, auto y) {return x + y;};           //c++14
    cout << lambda(1.5, 5) << endl;
    cout << lambda(2, 5) << endl;
    cout << lambda(3, 5.5) << endl;

    return 0;
}


3.lambda 初始化捕获

C++11的 lambda 表达式通过值拷贝和引用来捕获在外层作用域声明的变量。这就意味着 lambda 的值成员不可以是 move-only 类型,而在C++14中,lambda 表达式放开限制,允许对被捕获的成员用任意的表达式初始化。这样放开限制的第一个好处就是可以通过 std::move 来初始化捕获一个 move-only 类型的变量,如下例

int main()
{
    cout << "C++ 标准版本:" << __cplusplus << endl;

    int d = 20;
    auto lambda1 = [d = move(d)](auto x) {return d + x;};
    cout << lambda1(10) << endl;
    cout << lambda1(5) << endl;

    auto lambda2 = [d = 10](auto x, auto y = 10) {return d + x + y;};
    cout << lambda2(10, 5) << endl;
    cout << lambda2(5, 6) << endl;
    cout << lambda2(5, 3) << endl;

    cout << "Hello World!" << endl;
    return 0;
}


4.new/delete 消除

这个不知道为什么说是c++14的特性,c++各标准都有new、delete操作功能。


5. constexpr 函数上放松的限制


6.二进制字面量


7.数位分隔符


8.函数的返回类型推导


9.带默认成员初始化器的聚合类。

参考:

https://zh.cppreference.com/w/cpp/14

https://github.com/makelinux/examples/blob/main/cpp/14.cpp

https://blog.csdn.net/qq_45698148/article/details/121801662

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值