• C++学习(c++17)——1.2 稍微深入研究C++


    结束了上周的C++基础知识,这次稍微深入概要的继续了解C++。(前面写的几篇随笔都是整体大概记录一下自己不会,或者不熟的点)
    原帖地址**: https://www.cnblogs.com/ranbom/

    博主LeoRanbom

    只在原帖地址的博客上发布,其他地方看到均为爬取。

    如果觉得不错希望来点个赞。



    1.C++中的字符串

    1. C风格:将字符串看做普通字符数组。
    2. C++风格:string类(std,)
    3. 非标准的普通类。

    2.指针和动态内存

    编译时大小可变

    2.1.nullptr

    C++中使用nullptr来代替NULL。因为其有#define NULL 0。在函数重载是NULL参数会被误读为int型,而导致bug。

    注:delete后,为防止再次使用指针,最好设置为nullptr。

    2.2.短路运算来避免无效指针

    bool isValidSalary = (anEmployee && anEmployee->salary > 0);
    
    //或者更详细的
    bool isValidSalary = (anEmployee != nullptr && anEmployee->salary > 0);
    

    2.3.智能指针

    C++17中允许将数组存储在shared_ptr中。

    旧版:

    auto anEmployee = make_shared<Employee>();
    if(anEmployee){
        cout << "Salary: "<< anEmployee->salary<<endl;
    }
    

    c++17:【注意此时不能用旧版的make_shared<>()】

    share_ptr<Employee[]> employees(new Employee[10]);
    cout << "Salary: "<< employees[0].salary << endl;
    

    注:c++11/14中不赞成使用auto_ptr,c++17中废弃了它。所以应该选择性遗忘√。

    2.4.类型推断

    auto会去除引用和const限定符,而decltype则不会。

    decltype(x) y = 456;给y以x类型,并赋值456

    2.5.统一初始化

    直接初始化与复制初始化

    • 复制初始化: T obj = {arg1, arg2, ...};
    • 直接初始化: T obj{arg1, arg2, ...};

    在C++17中,与auto相结合时,直接和复制初始化有重要区别。

    直接初始化不能初始化多个元素。

    复制初始化则会推导出initializer_list<>。

  • 相关阅读:
    用户和组管理
    权限管理
    文件查找
    文件管理 2
    文件管理
    2016多校训练3_1007(hdu5758 Explorer Bo)
    poj3334(Connected Gheeves)
    POJ1015-Jury Compromise
    使用python来访问Hadoop HDFS存储实现文件的操作
    微信H5自动播放音乐,视频解决方案
  • 原文地址:https://www.cnblogs.com/ranbom/p/12653922.html
Copyright © 2020-2023  润新知