C++语法基础 #
一、注释 #
注释用于解释代码,编译器会忽略注释内容。
1.1 单行注释 #
cpp
// 这是单行注释
int x = 10; // 这也是单行注释
1.2 多行注释 #
cpp
/*
* 这是多行注释
* 可以跨越多行
* 用于较长的说明
*/
int main() {
return 0;
}
1.3 注释最佳实践 #
cpp
// 好的注释:解释为什么
// 使用二分查找提高搜索效率,时间复杂度O(log n)
int binarySearch(int arr[], int size, int target) {
// ...
}
// 不好的注释:重复代码内容
// 设置x等于10
int x = 10;
1.4 文档注释(Doxygen风格) #
cpp
/**
* @brief 计算两个整数的和
* @param a 第一个整数
* @param b 第二个整数
* @return 两数之和
*
* @example
* int result = add(3, 5); // result = 8
*/
int add(int a, int b) {
return a + b;
}
/**
* @class Person
* @brief 表示一个人的类
*/
class Person {
public:
std::string name; ///< 姓名
int age; ///< 年龄
};
二、标识符 #
标识符用于命名变量、函数、类等。
2.1 命名规则 #
- 只能使用字母、数字、下划线
- 必须以字母或下划线开头
- 不能使用关键字
- 区分大小写
cpp
// 合法标识符
int age;
int _count;
int userName;
int user_name;
int User123;
// 非法标识符
int 2name; // 不能以数字开头
int my-name; // 不能包含连字符
int int; // 不能使用关键字
int @email; // 不能包含特殊字符
2.2 命名规范 #
变量命名 #
cpp
// 小写字母+下划线(推荐)
int user_age;
std::string user_name;
// 驼峰命名法
int userAge;
std::string userName;
常量命名 #
cpp
// 全大写+下划线
const int MAX_SIZE = 100;
const double PI = 3.14159;
constexpr int BUFFER_SIZE = 1024;
函数命名 #
cpp
// 小写+下划线 或 驼峰
void print_hello();
void printHello();
int get_user_age();
int getUserAge();
类命名 #
cpp
// 大驼峰(Pascal Case)
class UserInfo {};
class StudentManager {};
class HttpRequest {};
宏命名 #
cpp
// 全大写+下划线
#define MAX_BUFFER_SIZE 1024
#define DEBUG_MODE 1
2.3 命名建议 #
cpp
// 好的命名:有意义、描述性强
int studentCount;
std::string emailAddress;
bool isValid;
double averageScore;
// 不好的命名:无意义、缩写过度
int n;
std::string s;
bool flag;
double avg;
三、关键字 #
C++关键字是语言保留的单词,不能用作标识符。
3.1 C++关键字列表 #
基本关键字 #
| 关键字 | 说明 |
|---|---|
int |
整数类型 |
char |
字符类型 |
float |
单精度浮点 |
double |
双精度浮点 |
bool |
布尔类型 |
void |
无类型 |
auto |
自动类型推导 |
const |
常量 |
控制流关键字 #
| 关键字 | 说明 |
|---|---|
if |
条件判断 |
else |
否则分支 |
switch |
开关语句 |
case |
case标签 |
default |
默认分支 |
for |
for循环 |
while |
while循环 |
do |
do-while循环 |
break |
跳出循环 |
continue |
继续循环 |
return |
返回 |
goto |
跳转 |
函数相关关键字 #
| 关键字 | 说明 |
|---|---|
inline |
内联函数 |
virtual |
虚函数 |
override |
重写 |
final |
最终 |
static |
静态 |
extern |
外部链接 |
constexpr |
常量表达式 |
类相关关键字 #
| 关键字 | 说明 |
|---|---|
class |
类 |
struct |
结构体 |
public |
公有 |
private |
私有 |
protected |
保护 |
friend |
友元 |
this |
当前对象指针 |
new |
动态分配 |
delete |
动态释放 |
operator |
运算符重载 |
模板相关关键字 #
| 关键字 | 说明 |
|---|---|
template |
模板 |
typename |
类型名 |
class |
模板参数 |
异常相关关键字 #
| 关键字 | 说明 |
|---|---|
try |
异常捕获块 |
catch |
异常处理器 |
throw |
抛出异常 |
noexcept |
无异常说明 |
C++11/14/17/20新关键字 #
| 关键字 | 版本 | 说明 |
|---|---|---|
nullptr |
C++11 | 空指针 |
decltype |
C++11 | 类型推导 |
static_assert |
C++11 | 静态断言 |
thread_local |
C++11 | 线程局部存储 |
alignas |
C++11 | 对齐说明 |
alignof |
C++11 | 对齐查询 |
noexcept |
C++11 | 异常说明 |
constexpr |
C++11 | 常量表达式 |
concept |
C++20 | 概念 |
requires |
C++20 | 约束 |
co_await |
C++20 | 协程等待 |
co_yield |
C++20 | 协程产出 |
co_return |
C++20 | 协程返回 |
3.2 关键字使用示例 #
cpp
#include <iostream>
// const 常量
const int MAX_SIZE = 100;
// constexpr 编译期常量
constexpr int SQUARE(int x) { return x * x; }
// auto 自动类型推导
auto add(int a, int b) -> int {
return a + b;
}
// class 类定义
class Student {
public: // 公有成员
Student(std::string n) : name(n) {}
virtual void print() { // 虚函数
std::cout << name << std::endl;
}
private: // 私有成员
std::string name;
};
// template 模板
template<typename T>
T maxValue(T a, T b) {
return (a > b) ? a : b;
}
int main() {
// auto 推导
auto x = 10; // int
auto y = 3.14; // double
auto s = "hello"; // const char*
// nullptr 空指针
int* ptr = nullptr;
// constexpr
constexpr int val = SQUARE(5); // 编译期计算
return 0;
}
四、分隔符 #
4.1 语句结束符 #
cpp
int x = 10; // 分号结束语句
4.2 花括号 #
cpp
// 代码块
{
int x = 10;
}
// 函数体
int main() {
return 0;
}
// 类定义
class MyClass {
};
// 初始化列表
int arr[] = {1, 2, 3};
4.3 圆括号 #
cpp
// 函数调用
func();
// 条件表达式
if (x > 0) { }
// 循环
for (int i = 0; i < 10; i++) { }
// 类型转换
double d = (double)10;
4.4 方括号 #
cpp
// 数组下标
int arr[10];
arr[0] = 1;
// Lambda捕获列表
auto f = [x]() { return x * 2; };
// 模板参数(新语法)
std::vector<int> vec;
4.5 逗号 #
cpp
// 变量声明
int a = 1, b = 2, c = 3;
// 函数参数
void func(int x, int y);
// 数组初始化
int arr[] = {1, 2, 3};
五、空白符 #
空白符包括空格、制表符、换行符,用于分隔代码元素。
5.1 必须使用空白符的情况 #
cpp
// 关键字与标识符之间
int x;
// 类型与变量名之间
double value;
// 运算符两侧(推荐)
int sum = a + b;
5.2 可选空白符 #
cpp
// 以下写法都正确
int x=10;
int x = 10;
int x = 10 ;
// 函数参数
func(a,b);
func(a, b);
5.3 空白符不能出现的地方 #
cpp
// 不能在标识符中间
int user name; // 错误
// 不能在运算符中间
int x = 10 + + 5; // 错误,应该是 10 + 5 或 10 + (+5)
六、表达式与语句 #
6.1 表达式 #
表达式是由运算符和操作数组成的式子,可以计算出一个值。
cpp
// 算术表达式
a + b
x * y + z
// 关系表达式
a > b
x == y
// 逻辑表达式
a && b
x || y
// 赋值表达式
x = 10
// 函数调用表达式
func(a, b)
6.2 语句 #
语句是程序的最小执行单位,以分号结尾。
cpp
// 声明语句
int x;
// 赋值语句
x = 10;
// 表达式语句
a + b;
// 空语句
;
// 复合语句(代码块)
{
int x = 10;
x = x + 1;
}
// 控制语句
if (x > 0) { }
for (int i = 0; i < 10; i++) { }
七、代码规范 #
7.1 缩进 #
cpp
// 推荐:4空格缩进
int main() {
if (true) {
for (int i = 0; i < 10; i++) {
std::cout << i << std::endl;
}
}
return 0;
}
7.2 行长度 #
cpp
// 每行不超过80-120字符
// 长行可以换行
int result = veryLongFunctionName(
parameter1,
parameter2,
parameter3
);
7.3 空行 #
cpp
#include <iostream>
// 函数之间空一行
void func1() {
// ...
}
void func2() {
// ...
}
int main() {
// 逻辑块之间空一行
int x = 10;
// 处理x
x = x * 2;
// 输出结果
std::cout << x << std::endl;
return 0;
}
7.4 代码对齐 #
cpp
// 变量声明对齐
int count = 0;
double average = 0.0;
char initial = 'A';
// 注释对齐
int x; // x坐标
int y; // y坐标
int width; // 宽度
int height; // 高度
八、总结 #
语法要点 #
| 概念 | 说明 |
|---|---|
| 注释 | // 单行,/* */ 多行 |
| 标识符 | 字母、数字、下划线,不能以数字开头 |
| 关键字 | 保留字,不能用作标识符 |
| 分隔符 | ; {} () [] , |
| 语句 | 以分号结尾 |
命名规范 #
| 类型 | 规范 | 示例 |
|---|---|---|
| 变量 | 小写+下划线 | user_name |
| 常量 | 全大写+下划线 | MAX_SIZE |
| 函数 | 小写+下划线/驼峰 | getUserName() |
| 类 | 大驼峰 | UserInfo |
| 宏 | 全大写+下划线 | DEBUG_MODE |
下一步,让我们学习C++的数据类型!
最后更新:2026-03-26