C++11 新特性
C++11引入了许多新特性,旨在提高语言的表达力、效率和安全性。以下是一些主要的新特性及其用法。
1. 空指针:nullptr
概念:nullptr
是一个更好的空指针常量,类型安全且可移植。
原理:它替代了传统的NULL
和0
,提供了对空指针的明确语义。
用法:使用nullptr
来表示空指针。
案例代码:
int* ptr = nullptr;
if (ptr == nullptr) {
// ptr 是空指针
}
2. final
关键字
概念:final
修饰符阻止类或成员函数被继承或重写。
原理:它提供了一种方式来封印类或函数,确保它们不会被进一步修改。
用法:在类或虚函数前使用final
关键字。
案例代码:
class Base {
public:
virtual void func() = 0;
};
class Derived final : public Base {
public:
void func() override {
// 实现
}
};
// Derived类不能被继承,func不能被重写
3. 自动类型推导:auto
和 decltype
概念:auto
和decltype
关键字允许编译器自动推导变量类型。
原理:auto
让编译器根据初始化表达式来推导类型,而decltype
推导表达式的类型。
用法:使用auto
或decltype
声明变量,编译器会自动确定其类型。
案例代码:
auto x = 42; // int
auto y = 3.14; // double
auto z = "hello"; // const char[6]
decltype(auto) str = "world"; // const char*
4. 序列for
循环
概念:基于范围的for
循环提供了一种简洁的方式来遍历容器和数组。
原理:它自动为容器中的每个元素创建迭代器。
用法:使用for
循环,后跟auto
和范围。
案例代码:
vector<int> vec = {1, 2, 3, 4, 5};
for (auto it : vec) {
cout << it << " ";
}
cout << endl;
5. 右值引用:
概念:右值引用是绑定到右值(临时对象)的引用。
原理:它允许资源的转移,如通过移动语义来避免不必要的复制。
用法:使用&&
声明右值引用。
案例代码:
vector<int> createVector() {
return vector<int>(100);
}
void processVector(vector<int>& vec) {
// 处理vec
}
int main() {
auto vec = createVector();
processVector(move(vec)); // 使用右值引用来移动vec
}
6. 智能指针
概念:智能指针是管理动态分配内存的模板类。
原理:它们包含引用计数器,并在不再有指针指向对象时自动释放内存。
用法:使用shared_ptr
、unique_ptr
和weak_ptr
来管理资源。
案例代码:
#include <memory>
shared_ptr<int> ptr1(new int(10)); // 共享指针
unique_ptr<int> ptr2(new int(20)); // 独占指针
shared_ptr<int> ptr3 = ptr1; // 增加引用计数
cout << *ptr1 << endl; // 输出 10
ptr1.reset(); // 减少引用计数,如果计数为0,则释放内存
C++11的这些新特性极大地增强了语言的能力,使得C++编程更加现代、安全和便捷。通过使用这些特性,开发者可以编写出更简洁、更高效和更健壮的代码。
作者:
hwaityd
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。