=======================================================
day01
=======================================================
1.当我们赋给一个无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。
eg: unsigned char c = -1; // c的值为255 对于负数,应该加上被除数的整数倍使得结果大于等于0再运算,即 (-1)%256 = (-1+256)%256 = 255%256=255
2.当我们赋给带符号类型一个超过它表示范围的值时,结果是未定义的。
3.切勿混合使用带符号类型和无符号类型。因为带符号数会自动转换成无符号数。
4.使用无符号数作为循环条件要注意的问题:
for(unsigned u =10;u<=0;--u) // 错误,变量u永远不会小于0,循环会一直进行。
std::cout<<u<<endl;

unsigned u=11; // 正确。
while(u>0){
--u;
std::cout<<u<<endl;
}
5.泛型转义序列:其形式是\x后跟1个或多个十六进制数字,或\后跟1个、2个、3个八进制数字,数字部分表示的是字符对应的数值。如:\x4d 表示字符M ,\115也表示字符M
6.变量的列表初始化(list initialization):
int a{0};
int a = {0}; // 这两条语句都可以做到。
列表初始化有一个重要特点:当我们使用列表初始化的初始值存在丢失信息的风险(如精度等),编译器将报错。
eg: long double ld = 3.1415926536;
int a{ld}; // 错误,存在丢失信息的风险
7.建议:当你第一次使用变量的时候再定义它。
8.复合类型:引用、指针
引用有两种,左值引用和右值引用(c++11新增)。
要注意的两点是,
(1)引用类型的初始值必须是一个对象。
eg: int &refVal = 10 // 错误,在最前面加一个const就可以了,原因在下面解释。
(2)引用的类型要和与之绑定的对象严格匹配。
eg: double dval = 3.14;
int &refVal = dval; // 错误,在最前面加一个const就可以了,原因在下面解释。
有两种例外情况,其中一种是在初始化常量引用允许用任意表达式作为初始值,只要该表达式的结果能转换成引用的类型即可。可以是非常量的对象、字面值、甚至是一个表达式。
eg: int i =42;
double dval = 3.14;
const int &r1 = i; // 正确
const int &r2 = 10; // 正确
const int &r3 = r1*2; // 正确
const int &r4 = dval; // 正确

9.与引用类似,指针的类型也要和它所指向的对象严格匹配。
eg: double *dval;
double *pd = &dval; // 正确
int *pi = pd; // 错误,指针pi的类型与指针pd的类型不匹配
10.一条变量的定义语句由一个基本数据类型和一组声明符组成。
面对一条比较复杂的指针或者引用的声明语句时,从右向左阅读有助于弄清楚它的真是含义。eg: int *&r = p; // 离r最近的是&,表明r是一个引用,往左走,*表明r引用的是一个指针,最后,基本数据类型int表明r引用的是一个int类型的指针。
11.const对象仅在文件内有效,当多个文件中出现了同名的const变量时,等同于在不同的文件中分别定义了独立的变量。想在不同的文件中共享const变量,也就是说,只在一个文件中定义,而在其他多个文件中声明并使用它,可以这样做:
对于const变量不管是声明还是定义,都添加extern关键字。
/////////////////////////////////////////////////////
12.顶层const与底层const
顶层const表示指针本身是个常量,更一般的说,它表示任意的对象是常量。
底层const表示指针所指的对象是一个常量。
13.常量表达式是指:值不会改变,并且在编译过程就能得到计算结果的表达式。
eg: const int a = 20; // a是常量表达式
const int b = a +1; // b是常量表达式
const int c = get_size(); // c不是常量表达式,get_size()需要运行时才能确定
我们有时候很难分辨一个初始值是否为常量表达式。c++11新标准允许变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。
eg: constexpr int mf = 20; // 20是常量表达式,所以声明正确。
constexpr int sz = size(); // 只有当size()是一个constexpr函数时,才是一条正确的声明语句。
必须明确一点的是:constexpr仅对指针有效,与指针所指的对象无关。
eg: const int *p = nullptr; // p是一个指向常量的指针
constexpr int *q = nullptr; // q是一个常量指针

C++Primer笔记-----day01的更多相关文章

  1. C++ Primer笔记

    C++ Primer笔记 ch2 变量和基本类型 声明 extern int i; extern int i = 3.14;//定义 左值引用(绑定零一变量初始值,别名) 不能定义引用的引用:引用必须 ...

  2. C++ Primer 笔记(1)基础中的战斗机 输入输出 对输入不定数据处理

    今天打算再重新好好的看一遍C++ Primer这本很经典的书籍,笔记开始: 1.每个C++程序都包含一个或者多个函数,其中必须有一个main,操作系统通过调用main入手运行程序: 2.函数包括:返回 ...

  3. C++ Primer 笔记 第一章

    C++ Primer 学习笔记 第一章 快速入门 1.1 main函数 系统通过调用main函数来执行程序,并通过main函数的返回值确定程序是否成功执行完毕.通常返回0值表明程序成功执行完毕: ma ...

  4. C++primer笔记之顺序容器

    最近又重新拾起C++primer,发现每一次看都会有不同的体验,但每一次看后因为不常用,忘记得很快,所以记笔记是很关键的一环,咋一看是浪费时间,实际上是节省了很多时间.下面就把这一节的内容做一个简单的 ...

  5. c++ primer 笔记 (一)

    昨天开始看的<C++ Primer>,确实不错.希望这周抓紧看完,每天做下笔记,以便以后复习. main函数返回一个值给操作系统   操作系统通过main函数返回的值来确定程序是否成功执行 ...

  6. C++ Primer笔记(1)——连续读取数据、类型对应的尺寸、类型转换、字符串分行写法

    这次要看看C++ Primer,这本基本上就是必读书籍了.下面的内容就是一些之前没有学过的知识的笔记. 读取数量不定的输入数据 虽然很简单,但是还是记一下: #include <iostream ...

  7. C++Primer笔记(3)

    标准库类型string表示可变长的字符序列,使用前先包含string头文件.(哈哈,终于可以逃脱C语言中的str函数系列了.)因为是标准库的一部分,所以string被定义在命名空间std中.所以你懂该 ...

  8. C++ Primer 笔记 第三章

    C++ Primer 第三章 标准库类型 3.1using声明 例: using namespace atd; using std::cin; 3.2string类型 初始化方式 string s1 ...

  9. C++ Primer 笔记 第二章

    C++ Primer 第二章 变量和基本类型 2.1基本内置类型 有算数类型和void类型:算数类型储存空间大小依及其而定. 算数类型表: 类型 含义 最小储存空间 bool 布尔型 - char 字 ...

随机推荐

  1. 对于Dubbo一些面试题自己的答案

    Dubbo 头几天瞧到<Java顶尖口试必问-Dubbo口试题汇总>,对于内里得难点本人试着答复少许,有错误得请民众指正. Dubbo固然大概不革新了,可是背靠阿里得措施能力,中文报告得多 ...

  2. 《DSP using MATLAB》示例Example 8.14

    %% ------------------------------------------------------------------------ %% Output Info about thi ...

  3. flask第十三篇——url注意事项

    先和大家说一下常用的请求方法 get:只是从服务器获取数据,不会对服务器的状态或数据产生任何影响: get方法的参数是放在URL中传递的. post:会对服务器的状态或数据产生影响:通过body形式进 ...

  4. Nchan 实时消息内置变量

      以下参考官方文档:   $nchan_channel_idThe channel id extracted from a publisher or subscriber location requ ...

  5. Oracle DB备份恢复篇之丢失控制文件

    实验目的 本篇主要模拟控制文件丢失后,如何根据实际情况恢复数据库,才能使数据库尽可能不丢失数据. 实验环境 1)Linux系统环境 [oracle@DG1 ~]$ lsb_release -a LSB ...

  6. python-unittest-生成测试报告

    HTMLTestRunner HTMLTestRunner 是 Python 标准库的 unittest 单元测试框架的一个扩展.它生成易于使用的 HTML 测试报告. 一.目录结构 先来看一下项目的 ...

  7. volatile浅析

    volatile的意思是不稳定的.易变的,但在多线程中却跟字面意思一毛钱关系没有.作为一个变量修饰符,它主要有两个作用:一个是告诉大家,该变量是一个在多个线程之间均可见的变量:另一个是告诉java虚拟 ...

  8. 论BOM管理的若干重要问题

    在制造业信息化建设过程中,BOM管理的意义已经被广泛认同与重视.BOM管理是企业产品数据管理领域要解决的核心问题,对制造企业的信息流和业务流程具有重要影响,可以说企业BOM数据架构已是企业架构的一部分 ...

  9. 兼顾FPGA和单片机

    当今,FPGA和单片机的应用非常广泛,在有FPGA知识的基础上,笔者认为可以把FPGA作为主要的学习目标,单片机作为辅助技能.其实二者是相互促进的.不管是FPGA还是单片机的开发其实都是基于较强的逻辑 ...

  10. git 绑定远程仓方法

    第1步:创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步.如果没有,打开Shell ...