C++ 中的可变参数模板、智能指针、回调函数及函数封装器详解

一、C++11是什么?

C++11是C++编程语言的一个重要版本,于2011年正式发布。它引入了许多新的特性和改进,目的是提升语言的功能性、效率和易用性。以下是C++11的一些主要特性:

  1. 自动类型推导(auto关键字):允许编译器自动推导变量的类型。

    auto x = 42; // x 的类型是 int
    
  2. 范围基于的 for 循环:简化对容器的迭代操作。

    for (const auto& elem : container) {
        // 对 elem 进行操作
    }
    
  3. 智能指针:提供了 std::unique_ptr 和 std::shared_ptr 以便更好地管理动态内存。

  4. 线程支持:引入了 std::threadstd::mutexstd::lock_guard 等线程相关的库来支持多线程编程。

  5. 右值引用和移动语义:允许通过右值引用来实现移动语义,从而优化资源管理。

    void func(MyClass&& obj) {
        // 使用 obj,obj 的资源将被移动
    }
    
  6. lambda 表达式:提供了一种创建匿名函数对象的简便方法。

    auto lambda = [](int x) { return x * x; };
    
  7. 模板改进:包括变长模板参数(Variadic Templates)、decltypestatic_assert 等增强了模板的功能。

    template<typename... Args>
    void func(Args... args) {
        // 处理变长参数
    }
    
  8. 强类型枚举(enum class:提供了一个更安全、强类型的枚举类型。

    enum class Color { Red, Green, Blue };
    Color color = Color::Red;
    

这些特性使得C++11在性能、安全性、编程效率等方面都有了显著提升。

二、自动类型推导是什么意思?

自动类型推导(auto关键字)是C++11引入的一个特性,用于让编译器自动推导变量的类型。这样可以简化代码,提高可读性,特别是对于复杂类型的变量。

基本用法

当你使用 auto 声明一个变量时,编译器会根据初始化表达式的类型自动推导出变量的类型。例如:

auto x = 42;        // x 的类型是 int
auto y = 3.14;      // y 的类型是 double
auto str = "hello"; // str 的类型是 const char*

在函数中

自动类型推导对于函数返回值也很有用。例如:

auto add(int a, int b) {
    return a + b; // 返回值类型会被自动推导为 int
}

与迭代器

在处理复杂的容器类型时,auto 可以简化迭代器的声明:

std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto it = vec.begin(); it != vec.end(); ++it) {
    std::cout << *it << ' ';
}

在这个例子中,auto 自动推导出 it 的类型为 std::vector<int>::iterator

与 Lambda 表达式

使用 auto 可以简化 Lambda 表达式的声明:

auto square = [](int x) { return x * x; };

auto 使得编写和维护代码变得更加简便,特别是在涉及到复杂的类型推导时。

三、智能指针是什么?

智能指针是C++标准库中提供的一类类模板,用于自动管理动态分配的内存。它们的目的是为了简化内存管理,避免内存泄漏、双重释放等问题。C++11引入了几个主要的智能指针类型:

  1. std::unique_ptr

    • 功能:表示独占所有权的智能指针。每个 std::unique_ptr 对象拥有指针所指向的资源的唯一所有权,不能被复制,只能被移动。
    • 用法
      std::unique_ptr<int> ptr(new int(10)); // 创建一个 unique_ptr
      // std::unique_ptr<int> ptr2 = ptr; // 错误: unique_ptr 不支持复制
      std::unique_ptr<int> ptr2 = std::move(ptr); // 正确: 通过移动
      
  2. std::shared_ptr

    • 功能:表示共享所有权的智能指针。多个 std::shared_ptr 可以共享对同一资源的所有权,资源会在最后一个 shared_ptr 被销毁时自动释放。
    • 用法
      std::shared_ptr<int> ptr1(new int(20)); // 创建一个 shared_ptr
      std::shared_ptr<int> ptr2 = ptr1; // ptr1 和 p
  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百态老人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值