C++Primer笔记
数据类型
类型转换
- 当赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型所能表示数值的总数取模之后的余数,例如:8bit的unsigned char可以表示0至255这256个数,那么当我们给一个unsigned char类型的变量赋值-1时,结果就是-1对256取模,也就是255;
又例如: 32bit的unsigned可以表示2^32 = 4,294,967,296个数值,那么当执行如下语句时首先i转换为unsigned类型,
-42 + 4,294,967,296 = 4,294,967,254;然后与u相加,结果为4,294,967,264
unsigned u = 10;
int i = -42;
std::cout << u + i << std::endl;
- 当赋给有符号数类型一个超出它表示范围的值时,结果是未定义的
字面值常量的各种写法
整型
- 八进制,数字0后面再加上数值,如024表示八进制的20;
- 十六进制,0x后面加上数值,如0x10表示十六进制的16;
变量的默认初始化
- 如果是内置类型的变量未被显式初始化,它的值由定义的位置决定。定义于任何函数体之外的变量被初始化为0;定义于函数体内部的则不被初始化,它的值是未定义的。
- 如果是类的对象没有被显式初始化,则其值由类确定。
变量的声明和定义
声明
声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。
定义
定义(definition)负责创建与名字关联的实体。
extern int i; //声明i而非定义i
int j; //声明并定义j
extern int n = 1;//包含显式初始化的声明即成为定义,此处extern的作用被抵消了
- 在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误。
- 变量只能被定义一次,但可以多次声明。
- 如果要在多个文件中使用同一个变量,就必须将声明和定义分离。此时变量的定义必须出现在一个文件中,而其他用到该变量的文件必须对其进行声明。
引用和指针
引用
引用类型为对象起了另外一个名字。
- 引用必须初始化
- 引用只能和初始对象绑定,不能重新绑定到另外一个对象
- 引用不是对象,它只是一个已经存在的对象的别名
指针
指针存放某个对象的地址
- 因为引用不是对象,所以不能定义指向引用的指针
void* 指针
- void*指针可以存放任意对象的地址。
- void指针的用途很有限:和别的指针比较、作为函数的输入输出,赋值给另一个void指针
- void*指针不能直接操作其指向的对象,因为不知道这个对象是什么类型
const限定符
可以理解为只读变量
- cosnt对象一旦创建,其值就不能再改变
- 默认情况下,const对象仅在文件内有效,当cosnt变量的初始值是常量表达式且多个文件出现了同名的cosnt变量时,相当于在不同文件中分别定义了独立的变量。
- 但是,当const变量的初始值不是常量表达式,且在多个文件中要用到同一个const对象时,可以添加extern关键字,不论定义还是声明都添加extern,这样就可以在多个文件中使用同一个const对象
const的引用
对const变量的引用,不能用作修改它绑定的对象的值,在定义这样的引用时,要加const关键字
const int val = 100;
const int &ref = val;//正确
int &ref = val;//错误
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理