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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报