hwaityd的小窝

Loading...

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 2024-10-20 01:08  hwaityd  阅读(4)  评论(0编辑  收藏  举报