1. 自动类型推断

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

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

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

2. Lambda函数

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

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

其中,捕获列表用于指定需要捕获的变量,参数列表用于定义函数的参数,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;
}

在上面的示例中,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

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


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