栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

1.变量模板

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

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

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


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(5) << endl;
    cout << circular_area(5) << endl;
    cout << circular_area(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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011377.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号