1. 自动类型推断

C++11 引入了自动类型推断的功能,即可以根据变量初始化的值自动推断出变量的类型。使用 auto 关键字可以让编译器来决定变量的类型,简化了代码的编写过程。例如:

auto var1 = 10;          // 根据初始化值推断出为int类型
auto var2 = 3.14;        // 根据初始化值推断出为double类型
auto var3 = "hello";     // 根据初始化值推断出为const char*类型
C++

需要注意的是,auto 关键字只能用于变量声明时,不能用于函数的返回类型和参数类型的声明。

2. Lambda 函数

Lambda 函数是 C++11 中另一个重要的新特性,它允许在代码中定义匿名的函数对象,可以方便地进行函数式编程。Lambda 函数可以捕获所在作用域的变量,并可以在函数体中操作这些变量。Lambda 函数的基本语法如下:

[捕获列表](参数列表) mutable(可选) 异常属性 -> 返回类型 { 函数体 }
C++

其中,捕获列表用于指定需要捕获的变量,参数列表用于定义函数的参数,mutable 关键字用于表示 Lambda 函数体内部的变量可以被修改,异常属性用于指定函数可能抛出的异常类型,返回类型用于指定函数的返回类型。例如:

int main() {
    int x = 10;
    int y = 20;
    // Lambda 函数,捕获 x 和 y,并进行相加操作
    auto sum = [x, y]() mutable {
        x = 30;
        return x + y;
    };
    int result = sum();  // 调用 Lambda 函数
    std::cout << "result: " << result << std::endl;  // 输出结果为 50
    std::cout << "x: " << x << std::endl;  // 输出结果为 10,x 的值没有改变
    return 0;
}
C++

在上面的示例中,Lambda 函数捕获了 x 和 y 两个变量,并在函数体内部修改了 x 的值。调用 Lambda 函数后,返回的结果为 x 和 y 的和,而 x 的值并没有改变。

3. 智能指针

智能指针是 C++11 引入的一种新的指针类型,用于管理动态分配的对象的生命周期,可以自动地释放对象的内存空间,避免内存泄漏的问题。C++11 中提供了三种智能指针:std::shared_ptr、std::unique_ptr 和 std::weak_ptr。

std::shared_ptr 是一种引用计数型的智能指针,可以被多个指针共享同一块内存空间。当没有任何指针指向该内存空间时,内存会被自动释放。std::unique_ptr 是一种独占型的智能指针,每个时刻只能有一个指针指向该内存空间,不能进行复制操作,可以通过移动语义来进行转移所有权。std::weak_ptr 是一种弱引用型的智能指针,不会增加引用计数。使用智能指针可以有效地避免指针管理不当导致的内存泄漏问题。

// 使用 std::shared_ptr 示例
std::shared_ptr<int> ptr1(new int);
std::shared_ptr<int> ptr2 = ptr1;

// 使用 std::unique_ptr 示例
std::unique_ptr<int> ptr3(new int);
// std::unique_ptr<int> ptr4 = ptr3;  // 错误,无法复制

// 使用 std::weak_ptr 示例
std::shared_ptr<int> ptr5(new int);
std::weak_ptr<int> ptr6 = ptr5;
std::shared_ptr<int> ptr7 = ptr6.lock();  // 通过 weak_ptr 获取 shared_ptr
C++

以上示例分别展示了 std::shared_ptr、std::unique_ptr 和 std::weak_ptr 的基本使用方法。


本文由轻山版权所有,禁止未经同意的情况下转发