请关注我!我将后续上传视频讲解!(保姆级程度)
一、变量命名规则
-
变量名是数据的标识,需遵循严格规则,确保编译器可识别
- 仅能包含字母、数字、下划线(_),不能含空格、连字符等特殊符号;
- 首字符不能是数字;
- 区分大小写(如
age和Age是不同变量); - 不能使用C++关键字(如
int、double、if等); - 以下划线开头或双下划线开头的名称可能被编译器保留,不建议使用;
- 名称长度无语法限制,建议简洁且表意(如用
student_count而非sc)。
-
合法/非法变量名示例
cpp// 合法变量名 int poodle; // 字母组成 int my_stars3; // 字母+数字+下划线 int cost_of_trip; // 下划线分隔单词 int myEyeTooth; // 驼峰命名法 // 非法变量名 int 4ever; // 以数字开头 int double; // 使用关键字 int honky-tonk; // 含连字符 int _Mystars3; // 下划线开头(保留给实现)
二、整型 --- 整数类型
2.1 基本整型分类
| 类型 | 符号属性 | 存储宽度(最小要求) | 取值范围示例(32位系统) |
|---|---|---|---|
short(短整型) |
有符号 | 16位 | -32768 ~ 32767 |
int(整型) |
有符号 | 至少与short相同 |
-2147483648 ~ 2147483647 |
long(长整型) |
有符号 | 32位 | -2147483648 ~ 2147483647 |
long long(C++11) |
有符号 | 64位 | -9223372036854775808 ~ 9223372036854775807 |
unsigned 类型 |
无符号 | 与对应有符号类型相同 | 0 ~ 对应有符号类型最大值×2+1 |
char(字符型) |
取决于实现 | 8位 | -128127(有符号)/0255(无符号) |
bool(布尔型) |
- | 1位 | true(1)/false(0) |
2.2 整型变量声明与初始化
-
声明格式:
类型 变量名;,初始化支持多种方式(C++11新增列表初始化)。 -
代码示例
cpp#include <iostream> #include <climits> // 包含整型取值范围常量 int main() { // 1. 基本声明与初始化 short score = 95; // 传统初始化 int temperature(25); // C++风格初始化 long population{1000000}; // C++11列表初始化(推荐,禁止缩窄转换) unsigned int age = 30; // 无符号整型,只能存储非负数 // 2. C++11列表初始化特性 int a{}; // 未指定值时初始化为0 // int b{3.14}; // 错误:浮点数转整型是缩窄转换,列表初始化禁止 // 3. 使用climits获取整型范围 std::cout << "int最大值:" << INT_MAX << std::endl; // 2147483647 std::cout << "int最小值:" << INT_MIN << std::endl; // -2147483648 std::cout << "unsigned int最大值:" << UINT_MAX << std::endl; // 4294967295 std::cout << "long long最大值:" << LLONG_MAX << std::endl; // 9223372036854775807 return 0; }
2.3 字符型 char
-
char实质: 其本质是整型,存储字符的ASCII编码,既可以表示字符也可以表示小整数。- 字符字面值用单引号括起(如
'A'、'5'); - 转义序列用于表示不可打印字符(如
'\n'换行、'\t'制表符); - 可显式声明
unsigned char(0~255)或signed char(-128~127)。
- 字符字面值用单引号括起(如
-
代码示例
cpp#include <iostream> int main() { char ch1 = 'A'; // 存储'A'的ASCII码65 char ch2 = 66; // 存储ASCII码65对应的字符'B' char newline = '\n'; // 转义序列:换行符 unsigned char ch3 = 200; // 无符号char,支持0~255 std::cout << "ch1:" << ch1 << ",对应的ASCII码:" << static_cast<int>(ch1) << std::endl; // A 65 std::cout << "ch2:" << ch2 << newline; // B(换行) std::cout << "ch3(无符号char):" << static_cast<int>(ch3) << std::endl; // 200 // 转义序列示例 std::cout << "Hello\tWorld!\n"; // 制表符分隔,换行 std::cout << "She said \"Hello!\"\n"; // 转义双引号:She said "Hello!" return 0; }
2.4 布尔型 bool
-
bool值: 其数值为true(逻辑真,对应整数1)和false(逻辑假,对应整数0),常用于条件判断。 -
代码示例
cpp#include <iostream> int main() { bool is_ready = true; bool is_empty = false; std::cout << "true对应整数:" << is_ready << std::endl; // 1 std::cout << "false对应整数:" << is_empty << std::endl; // 0 // 非零值隐式转换为true,零转换为false bool flag1 = 100; // true bool flag2 = 0; // false std::cout << "100转bool:" << flag1 << std::endl; // 1 std::cout << "0转bool:" << flag2 << std::endl; // 0 return 0; }
三、常量定义 --- const限定符
-
常量是值不可修改的量,C++推荐用
const定义符号常量(优于C语言的#define),理由:- 明确类型,编译器可做类型检查;
- 支持作用域限制(如局部常量、全局常量);
- 可用于复杂类型(如数组、结构)。
-
代码示例
cpp#include <iostream> using namespace std; // 全局const常量(整个文件可访问) const int MONTHS = 12; // 一年的月份数 const double PI = 3.1415926; // 圆周率 int main() { // 局部const常量(仅main函数内可访问) const int MAX_SCORE = 100; // 满分 // MAX_SCORE = 90; // 错误:const常量不可修改 // 用于数组长度(C++支持,C语言不支持) int days[MONTHS] = {31,28,31,30,31,30,31,31,30,31,30,31}; cout << "一年有" << MONTHS << "个月" << endl; cout << "圆的面积(半径5):" << PI * 5 * 5 << endl; cout << "10月有" << days[9] << "天" << endl; return 0; }
四、浮点型 --- 带小数的数字
4.1 浮点型分类
| 类型 | 存储宽度 | 有效位数(十进制) | 取值范围(示例) |
|---|---|---|---|
float |
32位 | 6~7位 | 10⁻³⁸ ~ 10³⁸ |
double |
64位 | 15~16位 | 10⁻³⁰⁸ ~ 10³⁰⁸ |
long double |
80/96/128位 | 18~19位 | 10⁻⁴⁹³² ~ 10⁴⁹³² |
4.2 浮点型声明与初始化
-
浮点型字面值表示法: 标准小数点表示法(如
3.14)和科学计数法(如3.14e2=314、1.23e-3=0.00123)。 -
代码示例
cpp#include <iostream> #include <cfloat> // 包含浮点型范围常量 using namespace std; int main() { // 1. 声明与初始化 float height = 1.75f; // 后缀f表示float(默认是double) double weight = 68.5; // double类型(推荐,精度更高) long double distance = 1.5e12L; // 后缀L表示long double // 2. 科学计数法 double speed = 3.0e8; // 3×10⁸(光速,单位m/s) double small = 1.23e-4; // 1.23×10⁻⁴ = 0.000123 // 3. 使用cfloat获取浮点型特性 cout << "float有效位数:" << FLT_DIG << endl; // 6 cout << "double最大值:" << DBL_MAX << endl; // 1.79769e+308 cout << "long double最小正值:" << LDBL_MIN << endl; // 3.3621e-4932 // 4. 输出格式控制(fixed表示固定小数点格式) cout.setf(ios_base::fixed); cout.precision(2); // 保留2位小数 cout << "身高:" << height << "m,体重:" << weight << "kg" << endl; // 1.75 68.50 return 0; }
4.3 浮点型精度问题
-
存储: 浮点型存储为二进制小数,部分十进制小数(如
0.1)无法精确表示,会存在微小误差,需避免直接比较浮点数是否相等。 -
代码示例
cpp#include <iostream> using namespace std; int main() { float a = 0.1f; double b = 0.1; double sum = 0.0; // 循环10次累加0.1,理论结果1.0 for (int i = 0; i < 10; ++i) { sum += b; } cout.setf(ios_base::fixed); cout.precision(10); cout << "0.1的float表示:" << a << endl; // 0.1000000015(存在误差) cout << "10次0.1累加结果:" << sum << endl; // 0.9999999999(非1.0) // 正确比较浮点数:判断差值小于极小值(如1e-9) if (abs(sum - 1.0) < 1e-9) { cout << "sum约等于1.0" << endl; } return 0; }
五、C++算术运算符
5.1 基本算术运算符
| 运算符 | 功能 | 注意事项 |
|---|---|---|
+ |
加法 | 支持整型、浮点型 |
- |
减法 | 支持整型、浮点型 |
* |
乘法 | 支持整型、浮点型 |
/ |
除法 | 整数除法截断小数;浮点除法保留小数 |
% |
求模(取余) | 仅支持整型,结果符号与被除数一致 |
5.2 运算符优先级与结合性
- 优先级:
*、/、%高于+、-; - 结合性: 同优先级运算符从左到右计算(如
a + b - c先算a+b); - 调整优先级: 可通过括号改变优先级(如
(a + b) * c)。
5.3 代码示例
cpp
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 3;
float c = 10.0f, d = 3.0f;
// 1. 基本运算
cout << "a + b = " << a + b << endl; // 13
cout << "c / d = " << c / d << endl; // 3.333333(浮点除法)
cout << "a / b = " << a / b << endl; // 3(整数除法,截断小数)
cout << "a % b = " << a % b << endl; // 1(10除以3余1)
cout << "(-10) % 3 = " << (-10) % 3 << endl; // -1(符号与被除数一致)
// 2. 优先级与结合性
int result1 = a + b * 2; // 10 + 6 = 16(*优先级高于+)
int result2 = (a + b) * 2; // 13 * 2 = 26(括号改变优先级)
int result3 = a - b - 1; // 10 - 3 -1 = 6(从左到右结合)
cout << "result1 = " << result1 << ", result2 = " << result2 << endl;
// 3. 复合赋值运算符(简化代码)
int x = 5;
x += 3; // 等价于x = x + 3 → 8
x *= 2; // 等价于x = x * 2 → 16
cout << "x = " << x << endl;
return 0;
}
六、类型转换
6.1 自动类型转换 --- 隐式转换
-
编译器自动触发,遵循 "低精度→高精度" 的安全转换规则:
- 整型提升:
bool、char、short自动转为int; - 混合运算: 不同类型参与运算时,低精度类型转为高精度类型(如
int+double→double); - 赋值转换: 右侧值转为左侧变量类型(可能丢失精度)。
- 整型提升:
-
代码示例
cpp#include <iostream> using namespace std; int main() { // 1. 整型提升 char ch = 'A'; // ASCII码65 int sum = ch + 10; // char自动转为int,sum = 75 // 2. 混合运算转换 int a = 5; double b = 3.14; double product = a * b; // int转为double,结果15.700000 // 3. 赋值转换(可能缩窄) int num = 3.99; // 浮点型转为整型,截断小数→3 double pi = 3; // 整型转为浮点型→3.000000 cout << "sum = " << sum << endl; // 75 cout << "product = " << product << endl; // 15.7 cout << "num = " << num << ", pi = " << pi << endl; // 3 3.0 return 0; }
6.2 强制类型转换 --- 显式转换
-
显式转换: 当自动转换不符合需求时(如高精度→低精度)。
- C语言风格:
(目标类型)值; - C++风格:
目标类型(值); - 推荐方式:
static_cast<目标类型>(值)(类型安全,仅支持相关类型转换)。
- C语言风格:
-
代码示例
cpp#include <iostream> using namespace std; int main() { double price = 99.9; int discount = 10; // 1. C语言风格强制转换 int int_price1 = (int)price; // 99(截断小数) // 2. C++风格强制转换 int int_price2 = int(price); // 99 // 3. static_cast(推荐) double final_price = price - static_cast<double>(discount); // 99.9 - 10.0 = 89.9 // 4. 转换为字符型(利用ASCII码) int ascii = 66; char ch = static_cast<char>(ascii); // 'B' cout << "int_price1 = " << int_price1 << endl; // 99 cout << "final_price = " << final_price << endl; // 89.9 cout << "ascii=" << ascii << " 对应的字符:" << ch << endl; // 66 B return 0; }
6.3 转换注意事项
- 避免将大值转为小类型(如
long long→short),可能导致溢出; - 浮点型转整型会截断小数(非四舍五入);
static_cast不支持无关类型转换(如int*→double*),比C风格转换更安全。
七、C++11新增特性:auto类型推断
-
C++11允许用
auto关键字让编译器根据初始化值自动推断变量类型,简化代码(尤其适用于复杂类型)。 -
代码示例:
cpp#include <iostream> using namespace std; int main() { // auto根据初始化值推断类型 auto num = 10; // 推断为int auto pi = 3.14159; // 推断为double auto ch = 'Z'; // 推断为char auto sum = num + pi; // 推断为double(int+double) cout << "num类型:int,值:" << num << endl; cout << "pi类型:double,值:" << pi << endl; cout << "sum类型:double,值:" << sum << endl; // 注意:auto必须初始化(否则无法推断类型) // auto x; // 错误:未初始化,无法推断类型 return 0; }