一、初始化方式
C++ 提供了多种初始化变量的写法:
int num = 10; // ① 等号初始化(C 风格) int num(10); // ② 括号初始化(构造函数风格) int num{ 10 }; // ③ 花括号(列表)初始化 —— 最严谨!三种方式对比
表格
| 方式 | 写法 | 特点 |
|---|---|---|
| 等号初始化 | int num = 10; | 最传统,无类型检查 |
| 括号初始化 | int num(10); | 函数式风格 |
| 花括号初始化 | int num{ 10 }; | 更严谨,带类型检查 |
花括号初始化的类型检查
⚠️ 花括号初始化会检查类型。比如给
int赋一个小数值会直接报错:
int num{ 3.14 }; // ❌ 报错!double 不能窄化为 int int num = 3.14; // ✅ 允许,但会截断为 3(不报错)数组的花括号初始化
int arr[]{ 1, 2, 3, 4, 5 }; // 用花括号初始化数组,长度自动推断二、输入与输出
基本操作符
cin >> 变量; // 输入 cout << 变量; // 输出⚠️
cin的坑:遇到空格就停止输入了! 比如输入hello world,cin >> str只会读走hello,后面的world被丢弃。
cin.get ():读取单个字符
配合char变量使用,从输入流中逐个读取一个字符。
char ch; cin.get(); // 从输入流读一个字符特点:可以读取空格、制表符、换行符等空白字符,读到的字符赋值给字符变量。 适用于逐个字符处理输入的场景。
cin.getline ():读取整行字符串
用来解决cin遇到空格就打断的问题。
cin.getline(str, 20, '?');参数含义:
str:存放输入内容的字符数组20:最多读19 个字符(留 1 个给结尾的\0)'?':遇到这个字符就提前打断(可以改成任意其他字符)
注意:遇到换行符也会打断,并且
getline会自动丢弃换行符。
get () vs getline () 区别
表格
| 函数 | 读取方式 | 特点 |
|---|---|---|
get() | 每次一个字符 | 逐个处理输入,可读空白字符 |
getline() | 读取一行字符串 | 读到换行符为止,并自动丢弃换行符 |
三、const 常量
const 的作用
定义数组时,数组大小必须是常量,否则报错。
const int n = 5; int arr[n]; // ✅ 合法,n 是常量const在 C++ 中拥有常量属性:
- 常量可以被 const 调用;
- 非常量不能被 const 调用("常性调用常性" 原则)。
C 与 C++ 中 const 的本质区别(重点对比)
表格
| 对比项 | C | C++ |
|---|---|---|
| 本质 | 只读变量,有内存地址,可通过指针间接修改,编译期不视为常量 | 若用编译期常量初始化(如const int n=5;),则视为编译期常量,可能无内存,被编译器直接替换为值 |
| 能否作常量表达式 | 不能(C99 之前const int n=5; int arr[n];报错) | 能(const int n=5; int arr[n];合法) |
| 指针修改的可见性 | 通过指针修改后,直接访问变量显示修改后的值(读取内存) | 通过指针修改后,直接访问变量仍显示初始值(编译器优化,用的是替换值) |
| 核心作用 | 编译期检查,防止无意修改,提升可读性 | 同样作用 +额外支持编译期常量场景(如模板参数) |
一句话总结:C 的
const是 "只读变量",C++ 的const(编译期常量)更接近 "真常量"。
const 与指针结合的两条规则(C/C++ 一致)
const int *p; // 指向常性 —— 指针指向的内容不可改(p 可以改指向) int* const p; // 指针常性 —— 指针的方向不可改(p 不能改指向,但内容可改)const int *p:指向为常性,即*p不可修改;int* const p:指针为常性,即p本身不可修改(指向固定)。