每个C++程序员的第一课都是从Hello World开始的。这个看似简单的程序实际上包含了C++程序的基本骨架。让我们先看一个完整的示例:
cpp复制#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}
#include <iostream>是C++中的预处理指令,它告诉编译器在实际编译之前先包含iostream头文件。这个头文件包含了标准输入输出流的定义,没有它我们就无法使用cout和cin这些基本的输入输出功能。
注意:C++标准库头文件不带.h后缀,这与C语言不同。例如C++用
而不是<iostream.h>
using namespace std;这行代码引入了标准命名空间。std是standard的缩写,包含了C++标准库中的所有标识符。使用命名空间可以避免命名冲突,特别是在大型项目中。
在实际开发中,我们有两种常见做法:
using namespace std;节省时间std::cout这样的完整写法,避免潜在的命名冲突int main()是每个C++程序的入口点,操作系统从这里开始执行程序。关于main函数有几个关键点:
int main(int argc, char* argv[])C++使用流(stream)的概念来处理输入输出:
cout是标准输出流,配合<<操作符使用cin是标准输入流,配合>>操作符使用endl表示换行并刷新缓冲区初学者常犯的错误是混淆<<和>>的方向。记住:数据流动的方向就像箭头指向的方向,cout是输出,所以数据流向cout;cin是输入,数据从cin流向变量。
C++提供了丰富的基础数据类型,主要分为以下几类:
| 类型 | 存储大小 | 取值范围 | 说明 |
|---|---|---|---|
| char | 1字节 | -128~127或0~255 | 字符类型 |
| int | 4字节 | -2^31~2^31-1 | 整型 |
| float | 4字节 | 约±3.4e±38 | 单精度浮点 |
| double | 8字节 | 约±1.7e±308 | 双精度浮点 |
| bool | 1字节 | true/false | 布尔型 |
char类型用于存储单个字符,实际上存储的是字符对应的ASCII码值。ASCII码表中有几个重要范围需要记住:
cpp复制char c = 'A';
cout << (int)c; // 输出65
int是最常用的整数类型,但C++还提供了更多整型变体:
选择整型时需要考虑:
float和double都用于表示实数,但精度不同:
在科学计算等需要高精度的场合,应该优先使用double。float的优势是占用内存少,在图形处理和嵌入式系统中可能更有用。
cpp复制float f = 3.1415926f; // 注意f后缀
double d = 3.141592653589793;
变量是程序中存储数据的基本单元。在C++中声明变量需要指定类型和名称:
cpp复制int age; // 声明
age = 18; // 赋值
// 更推荐在声明时初始化
int score = 100;
double pi = 3.14159;
变量命名规则:
C++中有两种定义常量的方法:
cpp复制const double PI = 3.1415926;
cpp复制#define PI 3.1415926
const相比#define的优势:
C++11引入了auto关键字,可以让编译器自动推导变量类型:
cpp复制auto x = 10; // x是int
auto y = 3.14; // y是double
auto z = "hello"; // z是const char*
使用auto可以简化代码,特别是在类型名很长的情况下,但要避免过度使用导致代码可读性下降。
变量的作用域是指变量在程序中可见的范围:
cpp复制int globalVar = 10; // 全局变量
void func() {
int localVar = 20; // 局部变量
static int staticVar = 30; // 静态局部变量
}
C++提供基本的算术运算符:
| 运算符 | 描述 | 示例 |
|---|---|---|
| + | 加法 | a + b |
| - | 减法 | a - b |
| * | 乘法 | a * b |
| / | 除法 | a / b |
| % | 取模 | a % b |
| ++ | 自增 | a++或++a |
| -- | 自减 | a--或--a |
注意整数除法的特性:
cpp复制int a = 5 / 2; // 结果是2,不是2.5
关系运算符用于比较两个值:
| 运算符 | 描述 | 示例 |
|---|---|---|
| == | 等于 | a == b |
| != | 不等于 | a != b |
| > | 大于 | a > b |
| < | 小于 | a < b |
| >= | 大于等于 | a >= b |
| <= | 小于等于 | a <= b |
逻辑运算符用于组合多个条件:
| 运算符 | 描述 | 示例 |
|---|---|---|
| && | 逻辑与 | a && b |
| || | 逻辑或 | a || b |
| ! | 逻辑非 | !a |
位运算符直接操作整数的二进制位:
| 运算符 | 描述 | 示例 |
|---|---|---|
| & | 按位与 | a & b |
| | | 按位或 | a | b |
| ^ | 按位异或 | a ^ b |
| ~ | 按位取反 | ~a |
| << | 左移 | a << n |
| >> | 右移 | a >> n |
位运算常用于底层编程和性能优化场景。
当表达式中有多个运算符时,C++按照优先级顺序计算。常见运算符优先级从高到低:
()++ -- + - ! ~* / %+ -<< >>< <= > >=== !=&^|&&||=不确定时最好使用括号明确优先级。
学习C++最重要的是多写代码,从简单程序开始,逐步增加复杂度。遇到问题时,学会查阅文档和搜索解决方案是程序员的重要能力。