ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

C++笔记(基础)初始化输入输出 const

C++笔记(基础)初始化输入输出 const

一、初始化方式

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 的本质区别(重点对比)

表格

对比项CC++
本质只读变量,有内存地址,可通过指针间接修改,编译期不视为常量若用编译期常量初始化(如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本身不可修改(指向固定)。


RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进