变量与数据类型:整型、浮点型、字符型、布尔型、变量命名规则

大家好,我是老刘。今天咱们聊聊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。这样一看就知道是布尔值,代码自解释。

五、变量命名规则:别给自己挖坑

这部分看似简单,但很多新手甚至老手都会犯低级错误。我总结了几条铁律:

  1. 只能包含字母、数字、下划线,且不能以数字开头。
  2. 不能是关键字,比如int、return、if这些。
  3. 区分大小写,myVar和myvar是两个不同的变量。
  4. 见名知意,别用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++ 数据类型 整型 short (2字节) int (4字节) long long (8字节) 浮点型 float (4字节) double (8字节) 字符型 char (1字节) 存储ASCII码 布尔型 bool (1字节) true / false 命名规则 字母/数字/下划线

这张图把今天讲的内容串起来了。你可以看到,整型、浮点型、字符型、布尔型是四大基础类型,而命名规则是贯穿始终的“红线”。

好了,今天就聊到这儿。变量和数据类型是C++的基石,看似简单,但每个细节都值得你认真对待。下次写代码时,多想想:这个变量该用什么类型?名字起得够不够清晰?相信我,这些习惯会让你少踩很多坑。


公众号:蓝海资料掘金营,微信deep3321