基本语法
翻译整理自 cppreference - C++ 语法。
1. 注释
// 行注释
/*
块注释
*/
/* 块注释可以 /* 嵌套 */ 仍有效 */ // C++ 起块注释不嵌套(这是 C99 风格)
C++ 块注释不能嵌套(与 C 相同)。
2. main 函数
int main() { ... }
int main(int argc, char* argv[]) { ... } // 命令行参数
int main(int argc, char** argv) { ... }main 返回 int,0 表示成功。不要写 void main(非标准)。
3. 输入输出
C++ 推荐 <iostream>:
#include <iostream>
int main() {
int age;
std::cout << "请输入年龄: ";
std::cin >> age;
std::cout << "你 " << age << " 岁\n";
}endl 与 '\n':
std::cout << "a" << std::endl; // 刷新缓冲
std::cout << "a\n"; // 不刷新(更快)
混合使用 printf:
#include <cstdio>
std::printf("%d\n", 42);4. 命名空间 namespace
避免命名冲突:
namespace mylib {
int add(int a, int b) { return a + b; }
namespace inner {
void hello() { std::cout << "hi"; }
}
}
int main() {
std::cout << mylib::add(1, 2);
using namespace mylib; // 引入整个命名空间
std::cout << add(1, 2);
using mylib::inner::hello;
hello();
}在头文件中避免
using namespace std;,会污染所有包含它的文件。
5. 变量声明
int x = 10;
int y(20);
int z{30}; // 列表初始化(C++11),检查窄化
auto a = 1; // 推断 int
auto b = 1.0; // double
auto c = "x"; // const char*
auto d = std::string("x");6. const 与 constexpr
const int Max = 100; // 运行时常量
constexpr int N = 5; // 编译期常量
constexpr int square(int x) { // 编译期函数
return x * x;
}
int arr[square(5)]; // OK
7. 引用 reference
引用是已有变量的别名,必须初始化且不能换绑:
int x = 1;
int& r = x;
r = 10;
std::cout << x; // 10
const 引用
const std::string& s = getString(); // 可绑定临时对象
右值引用(C++11)
std::string s = "hello";
std::string&& r = std::move(s); // 移动语义
8. 类型推断 auto / decltype
int x = 0;
decltype(x) y = 1; // y 类型为 int
auto add = [](int a, int b) { return a + b; }; // lambda
9. 类型转换
C++ 提供四种显式转换:
const_cast<int&>(const_x); // 去常量
static_cast<double>(i); // 静态转换(如数值)
dynamic_cast<Derived*>(base_ptr); // 多态向下转换,需 RTTI
reinterpret_cast<char*>(ptr); // 位级重解释
避免 C 风格 (int)x,使用 static_cast 更显式更安全。
小结
C++ 在 C 基础上增加了引用、命名空间、auto、const、模板等,让代码更安全更现代。下一章学习数据类型。