C++ primer 5th笔记
创始人
2024-02-17 08:29:42

目录

  • 11月25日 周五 阴
    • 第一、二章:变量和基本类型
      • 无符号
      • float与double有效位
      • 'A'与"A"
      • bool
      • 初始化并不等于赋值
      • 初始化
      • 强制类型转换
      • 声明与定义
      • C++是静态类型语言
      • 自定义类名
      • 引用必须初始化
      • 引用与指针
      • 空指针
      • 指针
      • 指向指针的指针
      • 指向指针的引用
  • 2022-11-26 星期六 小雨
      • const
      • 指针常量
    • 第三章 字符串、常量和数组
      • 命名空间
      • string
      • vector
      • 迭代器

11月25日 周五 阴

第一、二章:变量和基本类型

无符号

除去布尔型和扩展的字符型外,其他整形可以划分为带符号的和无符号的两种。带符号类型可以表示正数、负数或0,无符号类型则仅能表示大于等于0的值。
如果表达式里既有带符号类型又有无符号类型,当这个带符号类型取值为负时会出现异常,因为带符号数会自动转换成无符号数。所以切勿混用带符号与无符号类型
unsigned u = 10, u2 = 42 ,u - u2 = 4294967264
10, 10u, 10L, 10uL, 012, 0xC整形字面值,无符号整形字面值,长整形字面值,无符号长整形字面值,八进制整形字面值,十六进制整形字面值;
int month = 09, day = 07; 八进制整形,八进制中没有9,所以会报错
1024f;非法,整形字面值不可加后缀f;

float与double有效位

float最小尺寸为6位有效值,double最小尺寸为10位有效值。

'A’与"A"

前者代表单独的字符A,后者代表了一个字符的数组,包含两个字符:一个是字母A,另一个是空字符(‘\0’)

bool

非布尔类型值赋给布尔类型值时,初始值为0,结果为false。除此之外为true
布尔类型值赋给非布尔类型值时,初始值为false,结果为0。初始值true,结果为1

初始化并不等于赋值

初始化不是赋值,初始化的含义:创建变量时赋予其一个初始值
赋值:把对象的当前值擦除,用一个新的值来替代

初始化

定义于函数体内的内置类型的对象如果没有初始化,则其值未定义,如果试图拷贝或者访问此类值将引发错误。(所以建议初始化每一个内置类型的变量)
而类的对象如果没有显式地初始化,则其值由类决定。(例如string类如果没有指定初值则生成一个空串)

强制类型转换

int i = { 3.14 }; 非法,不能执行强制转换,因为存在丢失信息的风险
int i = 3.14;合法,已强制转换。

声明与定义

声明规定了变量的类型和名字,定义不仅这样,还会申请存储空间,也有可能直接赋初始值。
extern int i; //声明i,但无定义(如果赋初始值就是定义了)
int j; // 声明并定义j
变量能被多次声明,但只能被定义一次

C++是静态类型语言

含义是在编译阶段检查类型

自定义类名

用户自定义的类名一般以大写字母开头 Sales_item

引用必须初始化

一旦定义了引用,就无法令其再绑定到另外的对象

引用与指针

引用是其他对象的别名。指针本身就是对象(所以它本身也有自己的地址),存放其他对象的地址
因为引用不是对象,没有实际地址,所以不能定义指向引用的指针

空指针

int *p1 = nullptr; int *p1 = NULL; 等价于int *p1 = 0
int *p1 = 0; 直接将p1初始化为字面常量0来生成空指针
推荐使用nullptr

指针

pi = &ival;pi的值被改变,此时pi里是ival的地址,pi指向了ival
*pi = 0; ival的值被改变,指针pi并没有改变
任何非0指针对应的bool都是true;if(pi)
建议 int *p这种写法

指向指针的指针

int ival = 1024;
int *pi = &ival;
int **ppi = π
遇到复杂的指针和引用时,建议从右向左阅读

指向指针的引用

int i = 42;
int *p;
int *&r = p;// r是一个对指针p的引用

r = &i;// 因为r是引用了一个指针,所以给r赋值&i就是令p指向i
*r = 0; // 解引用r得到i,将i的值改为0;
为什么没有指向引用的指针?因为引用本身就不是一个对象。

2022-11-26 星期六 小雨

const

const对象一旦创建后其值就不能再改变,所以const对象必须初始化
如果想在多个文件之间共享const对象,就必须在变量的定义之前加extern关键字

指针常量

int errNumb = 0;
int *const curErr = &errNumb; // curErr将一直指向errNumb(此时可以通过指针修改errNumb的值)
const double pi = 3.14;
const double *const pip = π // pip是一个指向常量对象的常量指针(都不可修改)
const int *p;合法,指向常量的指针可以不初始化。
onst int *const p3;不合法,常量指针未初始化;

第三章 字符串、常量和数组

命名空间

操作符(::)的意思是:编译器应从操作符左侧名字所示的作用域中寻找右侧那个名字
头文件里的内容会拷贝到所有引用它的文件中,所有应该避免在头文件中使用using声明

string

在用cin读取string对象时,会自动忽略开头的空白,并在下一个空白处停止
如果输入" Hello World “,那么输出将是"Hello”
要解决这个问题可以使用getline(cin, s),当遇见换行符时停止
string中的size()函数返回的其实是一个unsigned无符号的int值。所以,对于表达式s.size() < n来说,如果n是一个负值,则这个表达式的结果几乎100%是true,因为负值n会自动转换成一个比较大的无符号值。
所以如果一个表达式里已经有了size()函数就不要再使用int了,这样可以避免混用int和unsigned可能带来的问题
C++中,字符串字面值与string是不同的类型,string s = “hello” + ","是错误的。必须保证每个加号两侧的运算对象至少有一个是string。

不管什么时候,只要对string对象使用了下标,都要确认这个下标处有值
小tips:

for (decltype(s.size()) index=0;  index != s.size(); index++ ) {}

题目:

string s;
cout << s[0] << endl;
//合法,定义后就占用一个字节,包含’\0’。

vector

vector中只能存放同一种类型对象
vector不能存放引用,因为引用不是对象

vector v1(10, 1);	// 有10个元素,每个值都是1
vector v1{10, 1};	// 有2个元素,分别是10,1
vector svec(10, "null");	//正确,创建了一个包含10个元素为“null”的vector对象。

范围for语句体内不应改变其所遍历序列的大小

只能对已确认存在的元素执行下标操作(否则常常会出现缓冲区溢出buffer overflow)

迭代器

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...