ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

记录C++ 13

记录C++ 13 万能引用C11里面的概念可以同时绑定左值和右值右值引用与自动类型推导的结合定义时候必须初始化根据初始值是左值还是右值自动推导为左值引用或右值引用引用折叠2个右值引用会被折叠成一个右值引用其他情况下都是左值引用完美转发完美转发的主要目的是解决函数模板中参数传递的类型推导问题。当我们在函数模板中接收参数并将其传递给其他函数时我们希望保留原始参数的类型左值引用、右值引用或值类型和常量性const。这样可以确保传递的参数在接收函数中得到正确的处理。#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; } }; templatetypename T void apply(T a) { xiaotangTest dudu(forwardT(a)); } int main() { xiaotangTest src; apply(move(src));//强制转换为右值引用xiaotangTest return 0; }使用场景泛型函数模板在实现泛型函数时有时需要将参数原封不动地传递给其他函数。使用万能引用和 forward我们可以将传入的参数完美转发到其他函数保留其原始值类别。实现容器类当实现自己的容器类时例如 vector 或 tuple需要正确处理元素的构造和销毁。完美转发可以用于在容器内部处理元素的构造和销毁确保元素的移动构造函数或复制构造函数被正确调用。封装其他函数有时我们需要封装其他函数并将参数传递给封装的函数。通过完美转发可以保留封装函数的调用方式将参数正确传递给内部的被封装函数。转发成员函数在某些情况下需要在类中编写转发函数将调用转发给类成员的其他函数。完美转发可以在类中实现这样的转发确保传递参数的准确性。智能指针自能自动化的管理指针所指向的动态资源的释放它是一个类有类似指针的功能能*和-运算符进行了重载unique_ptr:不允许拷贝构造和赋值操作允许函数返回unique_ptr类型指针支持对象数组void UniquePtrtest() { unique_ptrTest up(new Test); up-Show(); //void unique_ptrTest up2up; // 禁止拷贝构造和运算符重载 unique_ptrTest[] up3(new Test[5]);//可以管理数组 }shared_ptr:智能指针A拷贝构造产生智能指针B时AB共享同样一个对象智能指针A赋值给智能指针B时AB共享同样一个对象shared_ptr指针实现的时候内部使用了引用计数的技术void SharedPtrTest() { shared_ptrTest sp(new Test); sp-Show(); shared_ptrTest sp2sp; sp2-Show(); sp-Show(); cout sp2.use_count()endl; cout sp2.get()endl; shared_ptrTest sp3(new Test(world)); sp3sp;
返回列表