Skip to content

C++ 基本语法

C++ 程序从根本上讲是函数和类型(如类和结构体)的集合。面向对象编程 (OOP - Object-Oriented Programming) 将程序视为相互作用的对象的集合。

  • 对象 (Object): 类的一个实例 (instance)。它具有状态(数据成员/变量)和行为(成员函数/方法)。示例:一个特定的 Car 对象可能具有 color = "red"、currentSpeed = 50 等状态,以及 accelerate()、brake() 等行为。
  • 类 (Class): 用于创建对象的蓝图或模板。它定义了该类的所有对象将拥有的属性(数据成员)和动作(成员函数)。
  • 方法 (Method) / 成员函数 (Member Function): 与类关联的函数。方法定义了对象的行为并对其数据进行操作。
  • 数据成员 (Data Member) / 实例变量 (Instance Variable): 在类中定义的变量,用于保存对象的状态。类的每个对象(实例)都有这些变量自己的副本。

让我们看看一个简单的“Hello, World!”程序:

// 包含输入/输出流库头文件
#include <iostream>
// main() 是程序执行的起点。
int main() {
// 使用 std::cout 打印到控制台
// std::endl 插入换行并刷新流
std::cout << "Hello, World!" << std::endl;
// 返回 0 表示成功执行
return 0;
}

让我们分解一下各个部分:

  • #include <iostream>: 这是一个预处理器指令 (preprocessor directive)。它告诉编译器包含 <iostream> 头文件的内容,该文件包含用于标准输入/输出操作(如 std::cout)的声明。
  • int main(): 这是主函数。每个 C++ 程序的执行都从这里开始。int 表示 main 返回一个整数值给操作系统(按照约定,0 表示成功)。
  • { ... }: 花括号定义了一个代码块 (block),也称为复合语句 (compound statement)。main 函数的主体被包含在花括号中。
  • std::cout << "Hello, World!" << std::endl;: 这是一个语句 (statement)。std::cout 是标准输出流对象(通常是控制台)。<< 运算符是流插入运算符 (stream insertion operator),这里用于将字符串字面量 "Hello, World!" 和操纵器 std::endl(行结束)发送到 std::cout。
  • std:: 命名空间前缀 (Namespace Prefix): cout 和 endl 是标准命名空间 (std) 的一部分。使用 std:: 限定它们的名称。通常好的做法是在全局范围内使用 std:: 前缀,而不是 using namespace std;,以避免潜在的命名冲突。
  • return 0;: 此语句终止 main 函数并返回 0 值给调用进程(通常是操作系统),表示成功完成。
  • //: 单行注释以 // 开始并持续到行尾。
  • /* ... */: 多行注释以 /* 开始并以 */ 结束。

编译与执行 C++ 程序 (Compile & Execute C++ Program):

Section titled “编译与执行 C++ 程序 (Compile & Execute C++ Program):”

要编译和运行你的 C++ 代码,通常需要安装一个 C++ 编译器(如 g++、Clang 或 MSVC)。

  • 将上述代码保存到名为 hello.cpp 的文件中。
  • 打开终端或命令提示符。
  • 导航到保存文件的目录。
  • 使用你的编译器编译代码。好的做法是指定 C++ 标准版本(例如 C++17 或 C++20)和输出文件名:
  • g++ hello.cpp -o hello -std=c++17 (适用于 g++ 或 Clang)
  • cl hello.cpp /std:c++17 /EHsc /Fe:hello.exe (适用于 MSVC)
  • 如果编译成功(没有错误),将创建一个可执行文件(hello 或 hello.exe)。
  • 运行可执行文件:
  • ./hello (在 Linux/macOS 上)
  • hello.exe 或 .\hello.exe (在 Windows 上)
  • 你将在控制台上看到打印出 Hello, World!。

对于大型项目,手动管理编译会变得繁琐。通常使用像 CMake 或 Meson 这样的构建系统,以及 Make 或 Ninja 这样的构建工具来自动化构建过程。

C++ 中的分号与代码块 (Semicolons & Blocks in C++):

Section titled “C++ 中的分号与代码块 (Semicolons & Blocks in C++):”

在 C++ 中,分号 (;) 作为语句终止符。每条独立的指令或声明通常以分号结束。

// 三个不同的语句:
int x = 10;
x = x + 5;
std::cout << x << std::endl;

一个代码块 (block)(或复合语句 compound statement)是零个或多个语句的序列,用花括号 {} 括起来。代码块在逻辑上分组语句,通常用作函数体、循环体或条件语句体。代码块也定义了作用域 (scope)。

{
int y = 20; // y 是此块的局部变量
std::cout << "Inside block." << std::endl;
} // y 在这里超出作用域

空白字符(空格、制表符、换行符)通常被编译器忽略,除非需要它们来分隔 token(如 int 和 main)。你可以使用缩进和间距来格式化代码,以提高可读性。

标识符 (identifier) 是用于标识实体(如变量、函数、类、类型、命名空间等)的名称。标识符的规则如下:

  • 必须以字母 (a-z, A-Z) 或下划线 (_) 开头。
  • 可以跟随字母、下划线或数字 (0-9)。
  • 不能包含标点符号,如 @, $, % 或空格。
  • 区分大小写:myVariable 和 myvariable 是不同的标识符。
  • 不能与 C++ 关键字相同。
  • 包含双下划线 (__) 或以下划线开头后跟大写字母的标识符是为实现保留的,应该避免使用。

有效标识符示例:

value count temp_sensor _internalData MAX_SIZE MyClass processInput

关键字 (keywords) 是 C++ 语言中具有特殊含义的保留词。你不能将它们用作标识符。这是一个常见的 C++ 关键字(包括一些现代 C++ 标准中的关键字)的不完全列表:

核心类型 (Core Types)控制流 (Control Flow)循环 (Loops)用户定义类型 (User Types)面向对象/访问控制 (OOP/Access)内存/指针 (Memory/Pointers)修饰符 (Modifiers)现代 C++ (Modern C++)异常/其他 (Exceptions/Misc)
intdoublecharboolvoid
ifelseswitchcasedefault
forwhiledobreakcontinue
classstructenumunionnamespace
publicprivateprotectedvirtualoverride (C++11)
newdeletethisnullptr (C++11)using
conststaticexterninlinevolatile
auto (C++11)decltype (C++11)constexpr (C++11)noexcept (C++11)template
trycatchthrowreturnsizeof

注意:此列表是示例性的。请查阅 C++ 文档以获取特定标准版本的完整关键字集。

历史上,C++ 支持三字符组序列 (trigraph sequences),即以 ?? 开头的三个字符序列,用于表示单个字符(如 #、[、] 等),以应对某些字符缺失的环境。三字符组令人困惑且很少使用;它们在 C++17 中已从 C++ 标准中移除。在现代 C++ 代码中不应使用它们。