记录C++ 13

万能引用

C++11里面的概念可以同时绑定左值和右值,右值引用与自动类型推导的结合,定义时候必须初始化,根据初始值是左值还是右值,自动推导为左值引用或右值引用

引用折叠

2个右值引用会被折叠成一个右值引用,其他情况下都是左值引用

完美转发

完美转发的主要目的是解决函数模板中参数传递的类型推导问题。当我们在函数模板中接收参数并将其传递给其他函数时,我们希望保留原始参数的类型(左值引用、右值引用或值类型)和常量性(const)。这样可以确保传递的参数在接收函数中得到正确的处理。
cpp 复制代码
#include <iostream>
#include <string>
#include <utility> 
using namespace std;
class xiaotangTest
{
    private:
    string name;
    int age;

    public:
    xiaotangTest(): name("xiaotang"),age(30){
        cout <<"构造函数"<<endl;
    }
    xiaotangTest(const xiaotangTest& other):name(other.name),age(other.age){
        cout <<"拷贝构造函数"<<endl;
    }
    xiaotangTest(xiaotangTest&& other):name(move(other.name)),age(other.age){
        cout <<"移动构造函数"<<endl;
    }
};
template<typename T>
void apply(T &&a)
{
    xiaotangTest dudu(forward<T>(a));
}
int main()
{
    xiaotangTest src;
    apply(move(src));//强制转换为右值引用xiaotangTest&&
    return 0;
}

使用场景

泛型函数模板:在实现泛型函数时,有时需要将参数原封不动地传递给其他函数。使用万能引用和 forward,我们可以将传入的参数完美转发到其他函数,保留其原始值类别。
实现容器类:当实现自己的容器类时,例如 vector 或 tuple,需要正确处理元素的构造和销毁。完美转发可以用于在容器内部处理元素的构造和销毁,确保元素的移动构造函数或复制构造函数被正确调用。
封装其他函数:有时我们需要封装其他函数并将参数传递给封装的函数。通过完美转发,可以保留封装函数的调用方式,将参数正确传递给内部的被封装函数。
转发成员函数:在某些情况下,需要在类中编写转发函数,将调用转发给类成员的其他函数。完美转发可以在类中实现这样的转发,确保传递参数的准确性。

智能指针

自能自动化的管理指针所指向的动态资源的释放,它是一个类有类似指针的功能,能*和->运算符进行了重载
unique_ptr:不允许拷贝构造和赋值操作,允许函数返回unique_ptr类型指针,支持对象数组
cpp 复制代码
void UniquePtrtest()
{
    unique_ptr<Test> up(new Test);
    up->Show();

    //void unique_ptr<Test> up2=up;   //  禁止拷贝构造和运算符重载
    unique_ptr<Test[]> up3(new Test[5]);//可以管理数组
}

shared_ptr:智能指针A拷贝构造产生智能指针B时,AB共享同样一个对象

智能指针A赋值给智能指针B时,AB共享同样一个对象

shared_ptr指针实现的时候,内部使用了引用计数的技术

cpp 复制代码
void SharedPtrTest()
{
    shared_ptr<Test> sp(new Test);
    sp->Show();

    shared_ptr<Test> sp2=sp;
    sp2->Show();
    sp->Show();

    cout <<sp2.use_count()<<endl;
    cout <<sp2.get()<<endl;
    shared_ptr<Test> sp3(new Test("world"));
    sp3=sp;
相关推荐
mmmmath_32 小时前
LeetCode.541.反转字符串II
数据结构·算法·leetcode
Navigator_Z2 小时前
LeetCode //MySQL - 1251. Average Selling Price
c语言·算法·leetcode
君顾13 小时前
上海24小时自助健身房系统开发实战指南:从架构设计到落地部署
java·开发语言·健身房
醇氧3 小时前
MySQL 8.0 系统表损坏与引擎转换故障排查实战
数据结构·算法
大熊背3 小时前
《Color constancy by characterization of illumination chromaticity》之色度色域最大化算法(二)
算法·白平衡·色度·色温
香菜TTT3 小时前
大模型上下文协议(MCP):AI 应用的“USB-C”接口技术
开发语言·人工智能·经验分享
钓鱼的肝3 小时前
梳理(1-5)
c++·经验分享·笔记·算法·青少年编程
aramae3 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
HZZD_HZZD4 小时前
CSDN_批发市场水电漏损归因算法LAM的原理与落地
嵌入式硬件·物联网·算法