基础语法
C++ 是一门静态类型的编译型语言,在 C 语言的基础上引入了类、模板与标准库。本节梳理最常用的语法骨架:类型、流程、函数与命名空间。
变量与基本类型
C++ 提供整型(int、long)、浮点(double、float)、字符(char)与布尔(bool)。auto 关键字可让编译器推断类型,常用于复杂类型场景。
int age = 30;
double pi = 3.14159;
bool ready = true;
auto name = std::string("Alice");
const 用于声明常量,constexpr 表示编译期常量。字符串字面量类型为 const char[N],C++14 起可用 std::string 字面量后缀 s。
控制流
C++ 的控制流与 C 相似,常用 if、switch、for、while、do-while。C++17 起可在 if 与 switch 内初始化变量,使作用域更紧凑。
if (auto it = m.find(key); it != m.end()) {
// 使用 it
}
范围 for 循环能直接遍历容器或数组,无需索引。
函数
函数可以有零个或多个参数、一个返回值,支持重载(同名不同参数)和默认参数。参数传递方式影响拷贝成本:值传递会拷贝,引用传递(T& 或 const T&)避免拷贝。
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; } // 重载
void greet(const std::string& name = "World") { /* 默认参数 */ }
C++17 的 [[nodiscard]] 与 [[maybe_unused]] 属性可对编译器表达额外约束。
命名空间
namespace 用来组织代码并避免命名冲突。标准库全部位于 std 命名空间下。using namespace std; 不推荐在头文件中使用,会污染调用方作用域。
namespace utils {
int version() { return 1; }
}
using utils::version;
匿名命名空间(namespace { ... })中的符号仅在当前翻译单元内可见,等价于 static 的内部链接。
引用与指针简介
引用是已存在对象的别名,声明时必须绑定且不可重绑。指针是保存地址的变量,可为空(nullptr)或重新赋值。引用常用于函数参数与返回值,避免不必要的拷贝;指针更多用于表达可选值与多态。
int x = 10;
int& ref = x; // 引用
int* ptr = &x; // 指针,& 取地址
*ptr = 20; // 解引用修改