14. C++11 / 14新特性常用的用法详解

C++11 和 C++14 引入了许多新特性,使得 C++ 编程更加现代化和高效。以下是你提到的一些关键特性的简要说明:

1. auto 关键字

  • C++11 引入了 auto 关键字,用于自动推导变量的类型。编译器会根据初始化表达式自动推断变量的类型。

    auto x = 42; // x 的类型被推导为 int
    auto y = 3.14; // y 的类型被推导为 double
    auto z = "hello"; // z 的类型被推导为 const char*
  • 这个特性在模板编程和复杂类型声明中特别有用,可以减少代码冗余。

2. 范围 for 循环

  • C++11 引入了基于范围的 for 循环,使得遍历容器(如数组、向量等)更加简洁。

    std::vector<int> vec = {1, 2, 3, 4, 5};
    for (auto& elem : vec) {
        std::cout << elem << std::endl;
    }
  • 这种循环语法避免了手动管理迭代器,代码更加清晰。

3. 智能指针

  • C++11 引入了三种智能指针:std::unique_ptrstd::shared_ptr, 和 std::weak_ptr,用于自动管理动态内存,避免内存泄漏。

    • std::unique_ptr: 独占所有权的智能指针,不能复制,只能移动。

      std::unique_ptr<int> ptr(new int(10));
    • std::shared_ptr: 共享所有权的智能指针,使用引用计数来管理资源。

      std::shared_ptr<int> ptr1 = std::make_shared<int>(10);
      std::shared_ptr<int> ptr2 = ptr1; // 引用计数增加
    • std::weak_ptr: 弱引用指针,不增加引用计数,通常与 std::shared_ptr 配合使用,避免循环引用。

      std::weak_ptr<int> wptr = ptr1;

4. Lambda 表达式

  • C++11 引入了 Lambda 表达式,允许在代码中定义匿名函数。

    auto add = [](int a, int b) { return a + b; };
    int result = add(3, 4); // result = 7
  • Lambda 表达式可以捕获外部变量,并且可以指定捕获方式(按值或按引用)。

    int x = 10;
    auto lambda = [x](int y) { return x + y; };

5. 移动语义与右值引用

  • C++11 引入了移动语义和右值引用,允许资源的高效转移,而不是复制。

    • 右值引用 使用 && 表示,通常用于临时对象或即将销毁的对象。

      void foo(int&& x) {
          // x 是一个右值引用
      }
    • 移动语义 通过 std::move 实现,可以将资源从一个对象转移到另一个对象,避免不必要的复制。

      std::vector<int> v1 = {1, 2, 3};
      std::vector<int> v2 = std::move(v1); // v1 的资源被移动到 v2,v1 现在为空
  • 移动语义在实现高性能的容器和资源管理类时非常有用。

C++14 的改进

  • C++14 在 C++11 的基础上进一步简化了代码编写,并引入了一些新特性:

    • 泛型 Lambda:Lambda 表达式可以接受 auto 参数。

      auto lambda = [](auto x, auto y) { return x + y; };
    • std::make_unique:C++14 引入了 std::make_unique,类似于 std::make_shared,用于创建 std::unique_ptr

      auto ptr = std::make_unique<int>(10);
    • 二进制字面量:C++14 支持二进制字面量。

      int x = 0b101010; // x = 42

这些新特性使得 C++ 编程更加现代化、简洁和高效,特别是在处理复杂类型、内存管理和并发编程时。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员架构笔记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值