跳到主要内容

基础语法

C++ 是一门静态类型的编译型语言,在 C 语言的基础上引入了类、模板与标准库。本节梳理最常用的语法骨架:类型、流程、函数与命名空间。

变量与基本类型

C++ 提供整型(intlong)、浮点(doublefloat)、字符(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 相似,常用 ifswitchforwhiledo-while。C++17 起可在 ifswitch 内初始化变量,使作用域更紧凑。

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; // 解引用修改