本文主要有关 C++11 的一些新特性。
自动类型推导 —— auto 关键字
auto 关键字允许编译器根据初始化表达式自动推导变量的类型,这使得代码更简洁,减少了重复的类型声明。
例如,
auto x = 10; // x is an int
范围 for 循环
C++11 引入了更简洁的 for 循环语法,用于遍历容器中的元素。例如,
std::vector<int> vec = {1,2,3,4,5};
for (auto& elem: vec) {
std::cout << elem << std::endl;
}
智能指针
C++11 引入了 std::unitque_ptr 和 std::shared_ptr 来自动管理动态内存,避免了手动释放内存可能带来的错误。
其中,
std::unique_ptr: 独占所有权,确保一个指针只能指向一个资源。
std::shared_ptr: 共享所有权,多个指针可以共享同一个资源。使用引用技术管理管理资源生命周期。
匿名函数
C++11 可以使用 Lambda 表达式来简洁地定义匿名函数。特别适合用于回调和简单的计算。
例如,
auto add = [](int a, int b) -> int {
return a + b;
};
std::cout << add(3,4) << std::endl;
移动语义与右值引用
C++11 引入了移动语义和右值引用(rvalue reference),通过 && 符号表示。移动语义允许程序避免不必要的拷贝,以提高性能。
所谓的右值引用指的是可以绑定到临时对象(也就是右值),并通过移动构造函数或移动赋值操作符转移资源。
例如,
std::vector<int> vec1 = {1,2,3};
std::vector<int> vec2 = std::move(vec1);
// vec1 的资源被转移到 vec2,避免了拷贝
nullptr 关键字
C++11 引入了 nullptr 作为空指针的常量值,取代了 NULL, 提供了更强的类型安全性。
using 关键字与类型别名
using 关键字在 C++11 中可以用来创建类型别名,取代了传统的 typedef 语法,并且在模板场景中更加简洁。
例如,
using int_ptr = int*;
constexpr 关键字
constexpr 关键字用于定义编译期常量。与 const 不同的是,constexpr 保证了表达式是在编译期求值。
例如,
constexpr int square(int x) {
return x * x;
}
constexpr int result = square(5);
// 编译时计算 result 的值
Comments