hwaityd的小窝

Loading...
随笔 - 26,  文章 - 0,  评论 - 0,  阅读 - 441

C++11 新特性

C++11引入了许多新特性,旨在提高语言的表达力、效率和安全性。以下是一些主要的新特性及其用法。

1. 空指针:nullptr

概念nullptr是一个更好的空指针常量,类型安全且可移植。
原理:它替代了传统的NULL0,提供了对空指针的明确语义。
用法:使用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. 自动类型推导:autodecltype

概念autodecltype关键字允许编译器自动推导变量类型。
原理auto让编译器根据初始化表达式来推导类型,而decltype推导表达式的类型。
用法:使用autodecltype声明变量,编译器会自动确定其类型。

案例代码

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_ptrunique_ptrweak_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++编程更加现代、安全和便捷。通过使用这些特性,开发者可以编写出更简洁、更高效和更健壮的代码。

posted on   hwaityd  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示