c++ primer 第五版随笔
1、what is std::endl ?
for example,
std::cout << "hello world" << std::endl;
std::endl是一个函数模板,在这里作为一个函数名,即函数的地址,其为std::ostream operator <<(PFUNC func)的参数,即func即为std::endl, 在operator << 内部调用func(*this),一是用来打印换行符\n,二是用来刷新输出缓冲区。
2、what is the difference between sd::cout and std::cerr ?
std::cout 有一个输出缓冲区,从输出缓冲区打印到关联设备(一般是显示器)
std::cerr 无输出缓冲区,直接打印到关联设备(一般是显示器)
3、data type of cpp
....
wchar_t 4 bytes in gcc 8.3
char16_t 2 bytes in gcc 8.3
char32_T 4 bytes in gcc 8.3
4、顶层const 和 底层const
int * const p = &i; 其中p是顶层const,不允许改变p的指向(即不允许改变p的值)
const int *p = &i; 其中p是底层const,不允许改变p指向的内存单元的值,即 *p = value 是错误的!!!
特别的:对const对象取地址的指针是一种底层const指针;
推导auto类型时,等号右边的变量的顶层const属性通常被忽略, 底层const属性保留;
推导auto引用类型时,等号右边的顶层const属性需要保留,底层const属性也需要保留;
5、decltype
如果decltype(x)中,x是一个变量,那么该decltype表达式返回的该变量的类型包含顶层const和引用;
如果decltype(*p),其中p是一个指针,那么解引用的结果是一个引用,所以decltype(*p) 的类型为一个引用类型;
如果decltype((x)),那么如论x是什么,使用括号的结果一定是引用;
如果decltype(数组),那么结果类型仍然是数组,而非数组地址或首元素地址;
即 decltype(value)的结果取决于value是什么,是引用还是非引用;则 decltype((value))的结果一定是引用。
6、头文件
C语言风格 name.h
C++风格 cname 建议使用此种方式
7、存在数组的引用,但不存在引用数组
8、函数重载
函数的参数中,顶层const不能区分不同参数,即 func(int ) 和 func(const int) 是同一个函数;
而底层const则可以区分不同函数参数,即 func(int&) 和 func(const int&) 是不同函数,底层const指针同理;
9、常量表达式constexpr
修饰函数时,该函数必须有非void类型返回值;
constexpr函数的返回值类型和形参类型都必须是字面值类型,函数体中有且只有一条return语句。
与const不同, constexpr int* p ,该指针p是一个顶层const指针;
10、shared_ptr
auto p = std::make_shared<T>(new T(params));
auto q = p; 引用计数为2
p.get()返回原始指针T*,但是不要这么用
p.reset() 如果此时引用计数为0则释放资源,否则只减少引用计数
p.reset(p2) 如果此时引用计数为0则释放原来资源,否则只减少引用计数,然后重新管理p2所指向的资源,引用激素加1;
数组:auto p = make_shared<T[]>(new T[10]{xxxx}, [](T* p){delete[] p;}) 类型为T[] 必须为其指定一个内存删除器;
不可以通过原始指针隐式转换为shared_ptr ,即 shared_ptr<T> p = new T(params) 是错误的! 应该是 shared_ptr<T> p(new T(params)) 或者 make_shared<T>(new T(params))
11、unique_ptr
独占资源
auto p = unique_ptr<T>(new T(params))
p.release()释放资源控制权(但是资源本身并不管),返回空指针,p为空
p.reset() 释放资源
p.reset(T*) 释放原有资源,重新独占T*
特殊:p.reset(nullptr)释放资源
数组:与shared_ptr不同,不需要指定删除器,即 auto p = unique_ptr<T[]>(new T(params)),默认用delete[] 删除内存;
12、析构函数
如果一个类中定义了析构函数,那么它也同样需要拷贝构造和赋值构造,同时编译器不会再为其生成默认的移动move操作函数;
13、const和constexpr
const表示为【只读】,constexpr表示为【常量】
c++ primer 第五版随笔的更多相关文章
- C++ primer第五版随笔--2015年1月6日
记录自己看这本书时的一些内容. 一.引用(reference) 引用为对象起了另外一个名字.例如: int ival=1024: int &relVal1=ival;//对,注意尽量不要用这方 ...
- 实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1
本片博客为实验楼的训练营课程深入学习<C++ Primer第五版>的实验报告和学习笔记. 原课程地址为:https://www.shiyanlou.com/courses/405# 原文出 ...
- C++ 11 从C++ primer第五版的学习笔记
1. auto (page107) auto 推断会忽略const const int ci = i, & cr = ci; auto b = ci; // b is an int (to ...
- C++PRIMER第五版练习题答案第一章
C++PRIMER第五版练习题答案第一章 应该有很多小伙伴和我一样,闲来无事买了本C++的书自己啃,课后的练习题做的很揪心,这里我分享下我写的答案,希望能帮助到你,提供源码,就不跑了哈,毕竟现在是第一 ...
- C++Primer第五版学习笔记
<C++ Primer>Learning Note 程序实例下载地址:http://www.informit.com/title/0321714113 第一章 开始 ...
- C++学习书籍推荐《C++ Primer 第五版 (英文)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer(英文版)(第5版)>是全球最畅销的C++图书.这本久负盛名的C++经典教程,时隔八年之久,终迎来的重大升级.除令全球无数程 ...
- C++Primer第五版——习题答案目录
目前正在刷<C++Primer>这本书,会在博客上记录课后习题答案,答案仅供参考. 因为水平有限,如有有误之处,希望大家不吝指教,谢谢! 目录地址 使用的系统为:win 10,编译器:VS ...
- C++Primer第五版——习题答案和解析
感谢原文博主的分享:https://blog.csdn.net/misayaaaaa/article/details/53786215 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西 ...
- C++Primer第五版——习题答案详解(一)
习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第1章 开始&&第2章 变量和基本类型 练习1.3 #include&l ...
- C++Primer第五版——习题答案详解(二)
习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第3章 字符串.向量和数组 练习3.2 一次读入一整行 #include<iost ...
随机推荐
- 用 C 语言开发一门编程语言 — Q-表达式
目录 文章目录 目录 前文列表 Q-表达式 读取并存储输入 实现 Q-Expression 语法解析器 读取 Q-Expression 实现 Q-Expression 的函数 Head & T ...
- Django与前端框架协作开发实战:高效构建现代Web应用
title: Django与前端框架协作开发实战:高效构建现代Web应用 date: 2024/5/22 20:07:47 updated: 2024/5/22 20:07:47 categories ...
- 重做贪吃蛇 万向移动型 蛇的移动和吃食部分C# wpf版
之前写了一个贪吃蛇,代码实在太乱了,上一个是用polyline做的,这次这个是用一个个的elipse来渲染蛇的身体,其中一个圆点,就是一个elipse了.蛇的移动是通过定时器来实现的,方向键 A D控 ...
- Linux之命令提示符的颜色设置
1.临时设置 执行下面的命令: export PS1="[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e ...
- truffle 框架complie错误。
第一次使用trulle框架编译合约发现编译失败,原因是没有在truffle-config.js文件中加入编译器版本. module.exports = { // See <http://truf ...
- Windows库链接报错
问题回溯 今天拿到别人已经编译好的库,发现在链接的时候出现了报错 [9/9 12.7/sec] Linking CXX shared module bin\plugins\AsensingPlugin ...
- uniapp 富文本图片100%显示
下面的这个方法是在百度上找的,但是老是报错,一直没找到原因,索性自己就挨个检查了下,发现在过滤之前需要对传过来的值进行检测,是字符串才能让这个方法执行 filters: { formatRichTex ...
- 算法金 | 10 大必知的自动化机器学习库(Python)
大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣] 一.入门级自动化机器学习库 1.1 Auto-Sklearn 简介: Auto-Skl ...
- 带你了解磁盘驱动程序(xv6)
磁盘驱动程序 本文来聊聊磁盘驱动程序,驱动程序是硬件的接口,操作系统通过这个接口来控制硬件工作,所以驱动程序就好比是硬件和系统之间的桥梁.这是百科上给出的解释,可能看起来还是云里雾里,我来做做注解. ...
- C#.NET 循环字符串 V20231123
C#.NET 循环字符串 V20231123 public static bool IsIllegalOutTradeNo(string OutTradeNo) { foreach (char ite ...