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<>。

posted @ 2020-04-07 16:02  LeoRanbom  阅读(250)  评论(0编辑  收藏  举报