C++ 基本语法
C++ 基本语法
Section titled “C++ 基本语法”C++ 程序从根本上讲是函数和类型(如类和结构体)的集合。面向对象编程 (OOP - Object-Oriented Programming) 将程序视为相互作用的对象的集合。
- 对象 (Object): 类的一个实例 (instance)。它具有状态(数据成员/变量)和行为(成员函数/方法)。示例:一个特定的
Car对象可能具有color = "red"、currentSpeed = 50等状态,以及accelerate()、brake()等行为。 - 类 (Class): 用于创建对象的蓝图或模板。它定义了该类的所有对象将拥有的属性(数据成员)和动作(成员函数)。
- 方法 (Method) / 成员函数 (Member Function): 与类关联的函数。方法定义了对象的行为并对其数据进行操作。
- 数据成员 (Data Member) / 实例变量 (Instance Variable): 在类中定义的变量,用于保存对象的状态。类的每个对象(实例)都有这些变量自己的副本。
C++ 程序结构 (C++ Program Structure):
Section titled “C++ 程序结构 (C++ Program Structure):”让我们看看一个简单的“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)。你可以使用缩进和间距来格式化代码,以提高可读性。
C++ 标识符 (C++ Identifiers):
Section titled “C++ 标识符 (C++ Identifiers):”标识符 (identifier) 是用于标识实体(如变量、函数、类、类型、命名空间等)的名称。标识符的规则如下:
- 必须以字母 (a-z, A-Z) 或下划线 (
_) 开头。 - 可以跟随字母、下划线或数字 (0-9)。
- 不能包含标点符号,如
@,$,%或空格。 - 区分大小写:
myVariable和myvariable是不同的标识符。 - 不能与 C++ 关键字相同。
- 包含双下划线 (
__) 或以下划线开头后跟大写字母的标识符是为实现保留的,应该避免使用。
有效标识符示例:
value count temp_sensor _internalData MAX_SIZE MyClass processInputC++ 关键字 (C++ Keywords):
Section titled “C++ 关键字 (C++ Keywords):”关键字 (keywords) 是 C++ 语言中具有特殊含义的保留词。你不能将它们用作标识符。这是一个常见的 C++ 关键字(包括一些现代 C++ 标准中的关键字)的不完全列表:
| 核心类型 (Core Types) | 控制流 (Control Flow) | 循环 (Loops) | 用户定义类型 (User Types) | 面向对象/访问控制 (OOP/Access) | 内存/指针 (Memory/Pointers) | 修饰符 (Modifiers) | 现代 C++ (Modern C++) | 异常/其他 (Exceptions/Misc) |
|---|---|---|---|---|---|---|---|---|
int | double | char | bool | void | ||||
if | else | switch | case | default | ||||
for | while | do | break | continue | ||||
class | struct | enum | union | namespace | ||||
public | private | protected | virtual | override (C++11) | ||||
new | delete | this | nullptr (C++11) | using | ||||
const | static | extern | inline | volatile | ||||
auto (C++11) | decltype (C++11) | constexpr (C++11) | noexcept (C++11) | template | ||||
try | catch | throw | return | sizeof |
注意:此列表是示例性的。请查阅 C++ 文档以获取特定标准版本的完整关键字集。
三字符组 (Trigraphs) (历史注记):
Section titled “三字符组 (Trigraphs) (历史注记):”历史上,C++ 支持三字符组序列 (trigraph sequences),即以 ?? 开头的三个字符序列,用于表示单个字符(如 #、[、] 等),以应对某些字符缺失的环境。三字符组令人困惑且很少使用;它们在 C++17 中已从 C++ 标准中移除。在现代 C++ 代码中不应使用它们。