变量与数据类型:整型、浮点型、字符型、布尔型、变量命名规则
大家好,我是老刘。今天咱们聊聊C++里最基础、但也最容易被忽视的东西——变量和数据类型。
你可能觉得这有什么好讲的?不就是int、float、char、bool嘛。嗯,我当年也是这么想的。直到有一次,我在一个嵌入式项目里,因为把浮点数用错了地方,导致整个控制系统的精度出了问题,排查了整整两天……从那以后,我对数据类型就再也不敢马虎了。
说白了,变量就是一块内存的“名字”,而数据类型决定了这块内存有多大、能存什么、怎么存。你想想看,如果你连自己开的柜子有多大、能放什么都搞不清楚,那写出来的代码能靠谱吗?
一、整型:最常用的“计数器”
整型,就是用来存整数的。C++里的整型有好几种,我习惯把它们分成三类:
| 类型 | 大小(通常) | 取值范围 |
|---|---|---|
| short | 2字节 | -32768 ~ 32767 |
| int | 4字节 | -21亿 ~ 21亿 |
| long long | 8字节 | 非常大 |
我个人习惯,能用int就用int。为什么?因为int是CPU最“舒服”的大小,处理起来最快。除非你明确知道数值会超出int的范围,或者你要节省内存(比如嵌入式开发),否则别瞎折腾。
避坑指南:我曾经在计算时间戳差值时,直接用int存了毫秒数,结果程序跑了几天后数值溢出,变成了负数……从那以后,涉及时间、文件大小、ID这类可能很大的数值,我统一用long long。
// 整型示例
int age = 25;
short temperature = -10;
long long fileSize = 1024LL * 1024 * 1024; // 1GB
二、浮点型:精度是个大问题
浮点型用来存小数。C++里主要有两种:float(单精度)和double(双精度)。
float占4字节,精度大约7位有效数字。double占8字节,精度大约15位有效数字。
你可能会问:那用double不就行了?嗯,理论上没错。但我在做游戏引擎时,为了性能,能用float的地方绝不用double。因为GPU对float的处理速度比double快得多。
我的建议:日常开发用double,别纠结。只有当你明确知道“这里必须省内存”或“这里需要极致性能”时,才考虑float。
// 浮点型示例
float pi = 3.14159f; // 注意后面的f,表示float字面量
double precisePi = 3.14159265358979;
注意:浮点数不能直接用==比较!因为精度问题,0.1 + 0.2 可能不等于 0.3。我踩过这个坑,后来都是用差值小于某个极小值来判断。
三、字符型:不只是字母
char,占1字节,用来存单个字符。但本质上,它存的其实是整数——ASCII码。
比如 'A' 的ASCII码是65,'0' 是48,空格是32。
char grade = 'A';
char newline = '\n'; // 转义字符,表示换行
char digit = '5'; // 注意,这是字符'5',不是数字5
我记得刚学C++时,总搞混字符'5'和数字5。后来想明白了:字符'5'在内存里存的是53(ASCII码),而数字5就是5。完全两码事。
四、布尔型:真与假
bool,就两个值:true和false。占1字节。
别看它简单,用好了能让代码清晰很多。我见过有人用int 0和1来表示真假,说实话,可读性差远了。
bool isReady = true;
bool hasError = false;
if (isReady && !hasError) {
// 开始干活
}
小技巧:命名布尔变量时,我习惯用is、has、can这类前缀。比如isValid、hasData、canWrite。这样一看就知道是布尔值,代码自解释。
五、变量命名规则:别给自己挖坑
这部分看似简单,但很多新手甚至老手都会犯低级错误。我总结了几条铁律:
- 只能包含字母、数字、下划线,且不能以数字开头。
- 不能是关键字,比如int、return、if这些。
- 区分大小写,myVar和myvar是两个不同的变量。
- 见名知意,别用a、b、c这种,除非是循环里的临时变量。
// 好的命名
int studentCount = 30;
double averageScore = 85.5;
bool isPassed = true;
// 糟糕的命名
int a = 30;
double b = 85.5;
bool c = true;
我个人习惯用驼峰命名法:变量名首字母小写,后面每个单词首字母大写。比如totalScore、userName。当然,也有团队用下划线风格,比如total_score。都行,关键是统一。
我曾经犯过的错:在一个项目里,我用了l(小写L)和1(数字1)作为变量名的一部分。结果代码里l和1根本分不清,调试时差点崩溃。从那以后,我坚决不用l、O(大写O)这种容易混淆的字符。
六、知识体系总览
下面这张图,是我自己整理的数据类型知识结构。你可以把它当成一个“速查地图”。
这张图把今天讲的内容串起来了。你可以看到,整型、浮点型、字符型、布尔型是四大基础类型,而命名规则是贯穿始终的“红线”。
好了,今天就聊到这儿。变量和数据类型是C++的基石,看似简单,但每个细节都值得你认真对待。下次写代码时,多想想:这个变量该用什么类型?名字起得够不够清晰?相信我,这些习惯会让你少踩很多坑。