C++学习(c++17)——1.2 稍微深入研究C++
结束了上周的C++基础知识,这次稍微深入概要的继续了解C++。(前面写的几篇随笔都是整体大概记录一下自己不会,或者不熟的点)
原帖地址**: https://www.cnblogs.com/ranbom/
博主LeoRanbom
只在原帖地址的博客上发布,其他地方看到均为爬取。
如果觉得不错希望来点个赞。
1.C++中的字符串
- C风格:将字符串看做普通字符数组。
- C++风格:string类(std,
) - 非标准的普通类。
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<>。