现代C++
2025/11/7大约 2 分钟
现代C++
什么是现代C++?现代C++是指C++11及其后续版本,这些版本引入了许多新的语言特性和库,使得C++编程变得更加简洁、高效和强大。现代C++的主要特点包括:类型推导、智能指针、lambda表达式、并发编程、正则表达式、文件系统操作、模板元编程等。
先不提C++14、C++17、C++20等版本,单说C++11就已经带来了翻天覆地的变化。下面我们来看看C++11的一些重要特性。
1. 类型推导
C++11引入了auto关键字,可以让编译器根据初始化表达式自动推导变量的类型。这使得代码更加简洁,尤其是在处理复杂类型时。
#include <iostream>
#include <vector>
int main() {
auto x = 10; // x的类型被推导为int
auto y = 3.14; // y的类型被推导为double
auto z = std::vector<int>{1, 2, 3, 4, 5}; // z的类型被推导为std::vector<int>
std::cout << "x = " << x << std::endl;
std::cout << "y = " << y << std::endl;
std::cout << "z = ";
for (const auto& num : z) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}2. 智能指针
C++11引入了智能指针,包括std::unique_ptr、std::shared_ptr和std::weak_ptr,用于管理动态分配的内存,避免内存泄漏和悬空指针问题。
#include <iostream>
#include <memory>
class MyClass {
public:
MyClass() { std::cout << "MyClass constructor" << std::endl; }
~MyClass() { std::cout << "MyClass destructor" << std::endl; }
};
int main() {
{
std::unique_ptr<MyClass> ptr1(new MyClass()); // 使用unique_ptr管理MyClass对象
} // ptr1超出作用域,MyClass对象被自动销毁
{
std::shared_ptr<MyClass> ptr2(new MyClass()); // 使用shared_ptr管理MyClass对象
{
std::shared_ptr<MyClass> ptr3 = ptr2; // 共享所有权
std::cout << "Reference count: " << ptr2.use_count() << std::endl; // 输出引用计数
} // ptr3超出作用域,引用计数减1
std::cout << "Reference count: " << ptr2.use_count() << std::endl; // 输出引用计数
} // ptr2超出作用域,MyClass对象被自动销毁
return 0;
}3. lambda表达式
C++11引入了lambda表达式,用于定义匿名函数,使得代码更加简洁和灵活。
