码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++11新特性(一)


    C++11新特性

    • C++11新特性(一)
      • 语法改进
        • 统一的初始化方法
        • 成员变量默认初始化
        • auto关键字 用于定义变量,编译器可以自动判断的类型(前提:定义一个变量时对其进行初始化)
        • decltype 求表达式的类型
        • 智能指针 shared_ptr
        • 空指针 nullptr(原来NULL)
        • 基于范围的for循环
        • 右值引用和move语义 让程序员有意识减少进行深拷贝操作
      • 标准库扩充
        • ? 无序容器(哈希表) 用法和功能同map一模一样,区别在于哈希表的效率更高
        • 正则表达式 可以认为正则表达式实质上是一个字符串,该字符串描述了一种特定模式的字符串
        • Lambda表达式

    C++11新特性(一)

    语法改进

    统一的初始化方法

    用于任何类型对象的初始化,在 C++11 中,可以直接在变量名后面跟上初始化列表,来进行对象的初始化。
    
    • 1

    成员变量默认初始化

    构建一个类的对象不需要用构造函数初始化成员变量。
    
    • 1

    auto关键字 用于定义变量,编译器可以自动判断的类型(前提:定义一个变量时对其进行初始化)

    定义迭代器 i 的时候,类型书写比较冗长,容易出错。然而有了 auto 类型推导,我们大可不必这样,只写一个 auto 即可。
    
    • 1

    decltype 求表达式的类型

    自动类型推导
    
    • 1
    //auto与decltype的区别 auto 要求变量必须初始化,而 decltype 不要求。
    auto varname = value;
    decltype(exp) varname = value;
    
    • 1
    • 2
    • 3

    智能指针 shared_ptr

    多个 shared_ptr 智能指针可以共同使用同一块堆内存,而且其实现上采用的是引用计数机制,有一个放弃堆内存的使用权,不会影响其他指向同一堆的 shared_ptr指针
    
    • 1
    #include 
    #include 
    using namespace std;
    int main()
    {
        //构建 2 个智能指针
        std::shared_ptr<int> p1(new int(10));
        std::shared_ptr<int> p2(p1);
        //输出 p2 指向的数据
        cout << *p2 << endl;
        p1.reset();//引用计数减 1,p1为空指针
        if (p1) {
            cout << "p1 不为空" << endl;
        }
        else {
            cout << "p1 为空" << endl;
        }
        //以上操作,并不会影响 p2
        cout << *p2 << endl;
        //判断当前和 p2 同指向的智能指针有多少个
        cout << p2.use_count() << endl;
        return 0;
    }
    
    /*    程序运行结果:        
                10
                p1 为空
                10
                1    
    */          
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    空指针 nullptr(原来NULL)

     nullptr 是 nullptr_t 类型的右值常量,专用于初始化空类型指针。	 称为指针空值类型,nullptr 可以被隐式转换成任意的指针类型
    
    • 1
    int * a1 = nullptr;
    char * a2 = nullptr;
    double * a3 = nullptr;
    
    • 1
    • 2
    • 3

    同类型的指针变量都可以使用 nullptr 来初始化,编译器分别将 nullptr 隐式转换成 int、char 以及 double* 指针类型。另外,通过将指针初始化为 nullptr,可以很好地解决 NULL 遗留的问题

    
    ```bash
    
    ```bash
    
    ```cpp
    #include 
    using namespace std;
    void isnull(void *c){
        cout << "void*c" << endl;
    }
    void isnull(int n){
        cout << "int n" << endl;
    }
    int main() {
        isnull(NULL);
        isnull(nullptr);
        return 0;
    }
    
    /*    程序运行结果:        
            int n
            void*c
    */          
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    基于范围的for循环

    for(表达式 1; 表达式 2; 表达式 3){
       
    }
    
    • 1
    • 2
    • 3
    //程序实例
    #include 
    #include 
    #include 
    using namespace std;
    int main() {
        char arc[] = "www.123.com";
        int i;
        //for循环遍历普通数组
        for (i = 0; i < strlen(arc); i++) {
            cout << arc[i];
        }
        cout << endl;
        vector<char>myvector(arc,arc+3);
        vector<char>::iterator iter;
        //for循环遍历 vector 容器
        for (iter = myvector.begin(); iter != myvector.end(); ++iter) {
            cout << *iter;
        }
        return 0;
    }
    /*    程序运行结果:        
            www.123.com
            www
    */ 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    右值引用和move语义 让程序员有意识减少进行深拷贝操作

    常量左值引用既可以操作左值,也可以操作右值
    
    • 1
    int num = 10;
    const int &b = num;
    const int &c = 10;
    
    • 1
    • 2
    • 3
    C++11 标准新引入了另一种引用方式,称为右值引用,用 "&&" 表示
    
    • 1
    int num = 10;
    //int && a = num;  //右值引用不能初始化为左值
    int && a = 10;
    
    • 1
    • 2
    • 3
    和常量左值引用不同的是,右值引用还可以对右值进行修改
    
    • 1
    int && a = 10;
    a = 100;
    cout << a << endl;
    /*    程序运行结果:        
            100    
    */    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    move( arg ) ,将某个左值强制转化为右值

    标准库扩充

    ? 无序容器(哈希表) 用法和功能同map一模一样,区别在于哈希表的效率更高

    无序容器功能
    unordered_map存储键值对 类型的元素,其中各个键值对键的值不允许重复,且该容器中存储的键值对是无序的。
    unordered_set不再以键值对的形式存储数据,而是直接存储数据元素本身(当然也可以理解为,该容器存储的全部都是键 key 和值 value 相等的键值对,正因为它们相等,因此只存储 value 即可)。另外,该容器存储的元素不能重复,且容器内部存储的元素也是无序的。
    unordered_multiset和 unordered_set 唯一的区别在于,该容器允许存储值相同的元素。

    正则表达式 可以认为正则表达式实质上是一个字符串,该字符串描述了一种特定模式的字符串

    Lambda表达式

    匿名函数,简单地理解就是没有名称的函数
    ​

     [外部变量访问方式说明符] (参数) mutable noexcept/throw() -> 返回值类型
    ​ {
    ​ 函数体;
    ​ };
    
    • 1
    • 2
    • 3
    • 4

    仿函数

  • 相关阅读:
    Django(八、如何开启事务、介绍长见的字段类型和参数)
    【Ubuntu】安装Anaconda+vscode
    基于51单片机超市称重电子秤proteus仿真
    学习记录11
    QT+OSG/osgEarth编译之三十九:Blosc+Qt编译(一套代码、一套框架,跨平台编译,版本:Blosc-1.21.1)
    QT with OpenGL(Shadow Mapping)(面光源篇)
    汪子熙趣味成语接龙的游戏软件使用文档说明
    七月刚入职字节跳动的测试开发面试题,附答案
    武忠祥每日一题知识点总结
    java图片转二进制流_java将文件转化成二进制流
  • 原文地址:https://blog.csdn.net/qq_42413161/article/details/126672948
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号