C++ primer笔记 第二章

2.11

一字节等于4位

char   1字 = 4字节 = 32bite

int  4字

double 8字

2.12

无符号  unsigned + int/char   超出范围的话,结果是取模后的余数

如unsigned char 的范围是0-255,将-1赋值给这个类型,结果是1%256的余数,结果是255。

无符号数和有符号数相加,会得到无符号数。

2.13

以0开头的整数代表八进制数,以0x开头的是十六进制数

2.21

变量就是对象

2.22

多个文件中使用同一变量,声明和定义就要分离

声明:仅仅使名字被程序所知  extern int i;

定义:负责创建与名字关联的实体。

extern包含初始值就会变成定义   extern int i= 6  抵消了extern的作用

变量只能被定义一次,但是能多次被声明

c++是静态类型的语言,会在编译阶段进行类型检查

2.23

自定义的标识符不能连续出现两个下划线,也不能下划线紧连大写字母开头。

2.24

::作用域运算符

当全局变量与局部变量同名时,局部变量中的变量名前加::,换成全局变量。

2.31 引用

声明语句 =  基本数据类型+声明符

引用就是给对象起了另外一个名字

引用必须初始化一个对象,并一直绑定

2.32 指针

指针与引用的区别:

1、指针本身就是个对象,可以对指针复制或者拷贝等,而且指针可以变更所指的对象

2、指针可以在定义时不赋值,而是赋值nullptr

所有类型的指针都是占用四个字节(一个字)的空间。

定义空指针:int *p = nullptr;

void*指针也可以存放地址,但是并不知道所存对象是什么类型,因此没办法访问内存对象。

2.33 复合类型的声明

可以存在对指针的引用

int *p;

int *&r = p;

2.4  const 限定符

多个文件要共享const对象的话,要在定义时就加extern const

2.4.1 const的引用

不能用非常量引用去指向常量对象

例如 const int ci = 100;  

   int &r = ci;   错误

2.4.2 指针和const

指向常量的指针不能用于改变所指对象的值

常量指针:必须初始化,一但初始化完成,指针存放的地址就不能改变了,*在const之前

2.4.3 顶层const

顶层const:表示指针是个常量,也就是常量指针

例如:int* const a = &b;

int i = 0, const int ci = i,   这也是顶层const

底层const:指针所指的对象是个常量

例如:int const *a = &b 或 cosnt int* a = &b;

用于声明引用的const都是底层const

例如:const int c = 40; const int &r  = c;

顶层const不受拷贝的影响,底层const必须拷入和拷出的对象都具有底层const,或者非常量转成常量。

2.4.4

常量表达式:值不会改变,在编译过程中就能得到编译结果的表达式。

声明一个常量表达式:constexpr int a = 20;

constexpr声明指针的话,仅对指针有效,而与所指对象无关。

constexpr int *q = pullptr;   常量指针

如果将constexpr换成const,这就是一个指向常量的指针

2.5.1

using a = b;

a是b的别名

2.5.2 auto类型

auto会忽略顶层const,同时底层const会被保留下来。

int i = 0; const int ci = i;

auto b = ci;这时b是int型,顶层const被忽略

2.5.3 decltype

decltype(f()) sum = x;其中f()函数返回的类型,就是sum的类型

decltype 里面如果是常量,那么被指定为这个常量的类型

如果decltype里面是解引用的话,decltype会得到引用类型,例如decltype(*p)c, c会得到int&类型

如果decltype中的表达式加上了括号,那么结果将是引用

2.6.1 定义struct类型

类内初始值:可以在类内对数据成员进行初始化了。

struct sale_data{

        string book;

        unsigned sold = 0;     //初始化

}

2.6.3 编写头文件

预处理器 确保头文件多次包含仍能安全工作这是在编译之前执行的一段程序。

文件保护符避免了一个头文件被多次包含进同一个源文件。

#define 接受一个名字并定义这个名字为预处理器变量

#ifndef 检测预处理器变量是否未定义

头文件模板:

#ifndef A_H  (a_h是头文件中类的名字,建议大写)

#define A_H

//头文件内容

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值