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 第五版随笔的更多相关文章

  1. C++ primer第五版随笔--2015年1月6日

    记录自己看这本书时的一些内容. 一.引用(reference) 引用为对象起了另外一个名字.例如: int ival=1024: int &relVal1=ival;//对,注意尽量不要用这方 ...

  2. 实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1

    本片博客为实验楼的训练营课程深入学习<C++ Primer第五版>的实验报告和学习笔记. 原课程地址为:https://www.shiyanlou.com/courses/405# 原文出 ...

  3. C++ 11 从C++ primer第五版的学习笔记

    1. auto (page107) auto 推断会忽略const   const int ci = i, & cr = ci; auto b = ci; // b is an int (to ...

  4. C++PRIMER第五版练习题答案第一章

    C++PRIMER第五版练习题答案第一章 应该有很多小伙伴和我一样,闲来无事买了本C++的书自己啃,课后的练习题做的很揪心,这里我分享下我写的答案,希望能帮助到你,提供源码,就不跑了哈,毕竟现在是第一 ...

  5. C++Primer第五版学习笔记

    <C++ Primer>Learning Note 程序实例下载地址:http://www.informit.com/title/0321714113 第一章            开始 ...

  6. C++学习书籍推荐《C++ Primer 第五版 (英文)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer(英文版)(第5版)>是全球最畅销的C++图书.这本久负盛名的C++经典教程,时隔八年之久,终迎来的重大升级.除令全球无数程 ...

  7. C++Primer第五版——习题答案目录

    目前正在刷<C++Primer>这本书,会在博客上记录课后习题答案,答案仅供参考. 因为水平有限,如有有误之处,希望大家不吝指教,谢谢! 目录地址 使用的系统为:win 10,编译器:VS ...

  8. C++Primer第五版——习题答案和解析

    感谢原文博主的分享:https://blog.csdn.net/misayaaaaa/article/details/53786215 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西 ...

  9. C++Primer第五版——习题答案详解(一)

    习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第1章 开始&&第2章 变量和基本类型 练习1.3 #include&l ...

  10. C++Primer第五版——习题答案详解(二)

    习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第3章 字符串.向量和数组 练习3.2 一次读入一整行 #include<iost ...

随机推荐

  1. 自定义Naive UI的数据表格Data Table中按钮Button图标

    在Naive UI官网中详细介绍了[数据表格 Data Table](数据表格 Data Table - Naive UI)的使用方式 { title: "Action", key ...

  2. Java的深浅拷贝认识

    目录 浅拷贝 深拷贝 分辨代码里的深浅拷贝 在Java中,深拷贝和浅拷贝是对象复制的两种方式,主要区别在于对对象内部的引用类型的处理上. 浅拷贝 定义: 浅拷贝是指创建一个新的对象,但这个新对象的属性 ...

  3. MindSponge分子动力学模拟——体系控制(2024.05)

    技术背景 在传统的分子动力学模拟软件中,对于分子体系的控制,例如控制体系的相对位置亦或是绝对位置,通常都是通过施加一些约束算法来实现的.例如用于限制化学键的LINCS算法,又比如水分子体系非常常用的S ...

  4. mysql 命令行安装方式

    一:下载 先到 mysql 官方网站下载:https://dev.mysql.com/downloads/mysql/ 点击直接下载: 解压到目录:D:\mysql-8.0.19-winx64  如图 ...

  5. C# 方块热力图

      这张图右侧,0 3 6...... 30表示每个数字出现的次数,左侧就是每个数字出现次数的方块颜色图. 具体的思路是,找两个颜色 渐变的画出右侧的色条. 计算所有数字的最大最小次数,然后用他们色条 ...

  6. Fastapi获取其他第三方回调

    flask.django获取第三方回调数据,可以用request.data直接获取全部参数.而很多同学不知道fastapi如何获取回调的全部参数,其实可以通过request.body(). 如: @p ...

  7. .Net6 MiNiApi +EFCore6.0高B格操作的WebApi

    编辑器的选择项目运行雏形EFCore6.0的使用实体创建![在这里插入图片描述](https://img-blog.csdnimg.cn/abe224cea341434c9299e9643dbcd9e ...

  8. kubeadm部署高可用版Kubernetes1.21[基于centos7.6]

    1. 基础环境规划: 主机名 IP地址 节点说明 k8s-node01 192.168.1.154 node1节点 k8s-node02 192.168.1.155 node2节点 master01 ...

  9. block专递参数导致野指针引发crash

    一.问题引入 近日开发中引入一个随机crash,Crash堆栈如下: Exception Type: SIGSEGV Exception Codes: SEGV_ACCERR at 0x0000000 ...

  10. js 实现简易时钟效果

    大江东去,浪淘尽,千古风流人物.故垒西边,人道是,三国周郎赤壁.乱石穿空,惊涛拍岸,卷起千堆雪.江山如画,一时多少豪杰.遥想公瑾当年,小乔初嫁了,雄姿英发.羽扇纶巾,谈笑间,樯橹灰飞烟灭.故国神游,多 ...