类型与变量
程序需要保存数量、比例、状态和字符。类型说明一份数据能表示什么,变量则给这份数据一个可以在代码中使用的名字。本章讨论 C++ 内置类型与变量,字符串等文本类型由字符串章节承担。
选择基础类型
常见基础类型可以先这样理解:
| 类型 | 适合表示 | 示例 |
|---|---|---|
int |
整数 | count |
double |
近似小数 | ratio |
bool |
真或假 | enabled |
char |
单个字符 | grade |
types-and-variables.cpp
#include <iostream>
int main() {
int count{12};
double ratio{0.85};
bool enabled{true};
char grade{'A'};
std::cout << "数量: " << count << "\n";
std::cout << "比例: " << ratio << "\n";
std::cout << std::boolalpha << "已启用: " << enabled << "\n";
std::cout << "等级: " << grade << "\n";
return 0;
}类型不是装饰:它会影响可表示的值、允许的运算和编译器能发现的错误。double 不是“更大的 int”,bool 也不是只能保存任意整数的容器。
初始化与赋值
声明变量时要写类型和名字,初始化则是在创建时给它第一个值,赋值是修改已经存在的变量:
片段:声明、初始化与赋值
// 片段
int count{12};
count = count - 3;
int remaining{count};变量的类型在创建后不会改变。需要表达数量时使用整数,需要表达是否成立时使用 bool,不要把所有数据都塞进 double 或 int。
作用域
写在函数外的名字处于全局作用域,整个翻译单元都可能看见它。写在一对花括号内的名字处于块作用域,离开代码块后就不能再使用:
片段:全局作用域与块作用域
// 片段
int default_limit{1}; // 全局作用域:示例中的共享值
int main() {
int count{12}; // main 的块作用域
{
int increment{3}; // 内层块作用域
count += increment;
}
// increment 在这里已经不可见。
}全局可见不等于应该到处修改。可变全局状态会让代码难以测试。后续 const、constexpr 和自定义类型章节会继续说明更稳妥的组织方式。
常见错误
字符当文本
char 用单引号表示一个字符,例如 'A',多个字符的文本属于字符串主题。
使用前没有初始化
局部自动变量写成 int count; 后直接读取,没有可依赖的初始值,属于未定义行为,创建时使用 {} 或明确的初始值。
过度使用全局变量
全局作用域用于少量真正共享的值即可,会变化的状态优先放在更小的作用域中。
自测问题
- 为什么比例适合用
double,数量适合用int? - 全局作用域和块作用域的可见范围有什么不同?
count = 500;与int count{500};分别是什么动作?
本章回顾
你已经能用 int、double、bool 和 char 表达基础数据,并能区分初始化、赋值以及全局和块作用域。可运行示例见 types-and-variables.cpp。