记录下C++11完美转发的心得体会
来源:互联网 发布:vscode插件 web前端 编辑:程序博客网 时间:2024/05/16 08:21
从网上看了不下三次c++11的完美转发,但是依旧一直忘记, 今天看到一篇关于分析boost智能指针多线程安全性的文章(可以看这里),文末提到make_shared可以把counter和保持对象分配在一起,少了1次堆内存分配。 数据结构是:
用法就是: shared_ptr<Foo> shr_foo = make_shared<Foo>(...), 其中make_shared的参数就是你要调用的Foo构造函数的参数,要实现这样的功能就需要用到c++11的完美转发.
说简单点完美转发就是调用func1, 借由func1调用func2, 就像直接调用func2一样,本来想传给func2的参数,借由func1转发后还是保持着“属性”。这里的属性是指const/non-cost,左值/右值。
因为借由func1调用func2,为了避免在func1这层就出现了拷贝,func1的参数都必须是引用类型的,至于最后是不是拷贝还是引用则由func2来决定。为了使得所有的参数类型都能转发,肯定得用模板,这时候脑海里能想到的func1使用应该是这样的:
template <class T>void func1(T& t){ func2(t);}
这里只有四种情况(没有&&符号的时候):
实参为const 左值, func1能完美转发
实参为non-const 左值, func1也可以完美转发
实参为const右值, func1推导为const U& , 然后const 右值实参是可以付给 const U&的, func1也可以转发(vs上编译不过, gcc?)
实参为non-const右值,func1推导出U&, 此时编译不过。
--未完,先睡觉!
=========================================
关于左右值和const的模板推导的问题:
推导不出引用关系,在引用前提下能推导出const。
eg:
template <class T>void test(T t){}template <class T>void test2(T& t){}int a = 10;int& ref = a;test(ref);//这里t还是intconst int b = 10;test(b);// 这里t还是inttest2(b)// 这里t是const int&
=========================================
- 记录下C++11完美转发的心得体会
- 记录下此时的心得体会
- C++11:完美转发的使用
- 【C++11】完美转发的使用
- C++ 11完美转发
- C++ 11完美转发
- c语言的心得体会
- 模板类 的完美转发
- 【原】C++ 11完美转发
- C++11 forward完美转发
- 最近在看《微服务设计》这本书。记录下自己的心得体会。
- 转发:尊重人性的不完美
- std::forward 完美转发的原理
- C++11 移动语义和完美转发
- C++11:移动语义和完美转发
- 嵌入式系统C语言编程的心得体会
- [C++] 右值引用:移动语义与完美转发
- 安装iis的心得体会,分享下!
- 《Pattern Recognition and Machine Learning》学习笔记 第一章(三)
- Android 4.0 ICS SystemUI浅析——SystemUI启动流程
- Mule ESB 学习笔记
- JBPM4.4:ProcessDefinition/ProcessInstance/Execution/Task关系和区别
- 三角形二(海伦公式)
- 记录下C++11完美转发的心得体会
- mac下用vim打造python IDE之一 —— CTags
- PHP-GTK
- hdu2032—— 杨辉三角
- 使用万能表单解析程序将表单数据封装成List<Map>
- 2012java决赛编程大题
- 第3章 建立需求模型
- JBPM4.4-依赖包介绍
- 黑马程序员_Java基础2