C++生产和使用的临时对象
所谓暂时对象就是一种无名对象。
它的出现假设不在程序猿的预期之下(比如不论什么pass by value操作都会引发copy操作,于是形成一个暂时对象),往往照成效率上的负担。
但有时候能够制造一些暂时对象,却又使程序干净清爽的技巧。
刻意制造暂时对象的方法是。在型别名称之后直接加一对小括号,并可指定初值,比如int(8),其意义相当于调用对应的constructor,且不指定对象名称。STL最常将此技巧应用于仿函数与算法的搭配上。
比如:
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
template <typename T>
class print
{
public:
voidoperator()(const T& elem)
{
cout<< elem << ' ';
}
};
int main(int argc, char* argv[])
{
intia[6] = {0,1,2,3,4,5};
vector<int>iv(ia,ia+6);
for_each(iv.begin(),iv.end(),print<int>());
}
最后一行便是产生“class template 具现体”print<int>的一个暂时对象。这个对象被传入for_each()之中起作用。当for_each()结束时。这个暂时对象它结束了它的生命。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
转载于:https://www.cnblogs.com/yxwkf/p/4677104.html
C++生产和使用的临时对象相关推荐
- 提高C++性能的编程技术笔记:临时对象+测试代码
类型不匹配:一般情况是指当需要X类型的对象时提供的却是其它类型的对象.编译器需要以某种方式将提供的类型转换成要求的X类型.这一过程可能会产生临时对象. 按值传递:创建和销毁临时对象的代价是比较高的.倘 ...
- golang的临时对象池sync.Pool
今天在写码之时,发现了同事用到了sync.pool.因不知其因,遂Google之.虽然大概知道其原因和用法.还不能融汇贯通.故写此记,方便日后查阅.直至明了. 正文 在高并发或者大量的数据请求的场景中 ...
- C++对象模型9——临时对象的生命周期、模板及实例化分析、内联函数
一.临时对象的生命周期 T c=a+b 假设T是一个类型,那么上述代码执行时,首先会产生一个临时对象用来存放a+b的结果(拷贝初始化临时对象),然后用该临时对象拷贝初始化c,最后临时对象被释放.如果开 ...
- C++编程进阶8(最好不要实现类型转换运算符、单形参的构造函数与类型转换、临时对象与RVO)
二十九.最好不要实现类型转换运算符 示例代码 class fraction { public:fraction(int numerator=0, int denominator=1);operator ...
- 临时对象与NRV技术
临时对象与NRV技术 <More Effective C++>中讲到,在C++中真正的临时对象是看不见的,它们不出现在你的源代码中.建立一个没有命名的非堆(non-heap)对象会产生临时 ...
- Gotchas 44-引用和临时对象
摘要: 1)"引用必须用左值来初始化"基本上着意味着引用的初始化物必须具有一个地址,也有一个值(→常见错误6).不过谈及指向常量的引用时,事情就开始变得复杂了.指向常量的引用仍然必 ...
- std::ostringstream::str()返回临时对象
取得std::ostringstream里的内容可以通过str()和str(string&)成员函数.由于str()返回的是临时对象,因而会有如下误用: const char * pBuff ...
- 第八天2017/04/17(1、拷贝构造、❤临时对象)
调用拷贝构造函数的三种case 1. MyPoint p2 = p1; MyPoint p2(p1);case1中的重点:MyPoint p3 = MyPoint(3,3); //此时:C++编译器进 ...
- C++之临时对象的构造与析构
1.临时对象产生的时间点 对象作参数(值传递).返回对象(值传递) 2.临时对象析构的时间点(重点.难点) 3.临时对象会降低效率,但是哪些情况必须使用临时对象? [注]真正的临时对象是看不见的,它不 ...
- 探讨“临时对象”(temporary object)
2019独角兽企业重金招聘Python工程师标准>>> MSDN中对VS2012版本的临时对象的说明如下: 在某些情况下,编译器有必要产生临时对象. 当初始化一个 常量引用 ...
最新文章
- 手机直播系统源码搭建说明
- 从零开始的51单片机——VsCode+EIDE环境搭建
- 找软件开发开发工作_将求职变成开发项目
- 30篇「CVPR2020」最新论文抢先看!看计算机视觉2020在研究什么?
- Python wxpy通过ModBus控制电脑鼠标和键盘
- 深度学习中的梯度下降算法
- 理解Rails真实性令牌
- STC89C51单片机串口程序下载失败总结
- 《博弈论全家桶》(ACM / OI)(超全的博弈论 / 组合游戏大合集)
- matlab计算中值 众值,基于GPS运动摄像机数据确定道路圆曲线半径及行车视距的方法与流程...
- 简易地图(MKMapView,CLLocationManagerDelegate,CLGeocoder)
- 面向对象版学员管理系统(存储数据库)
- js练习题:对象字面量的形式创建一个名字为可可的狗对象
- 手机谷歌翻译位置服务器,谷歌翻译更新手机端App:中国用户可无障碍使用
- c语言链表拆分,P2 拆分链表
- 计算机基础教育对工科学生的意义,深入进行高校工科非计算机专业计算机基础教育改革…...
- spring拦截器传递传递参数到controller+Aop切面环绕方法传递参数到目标方法
- intel NVME SSD 性能 P5600 P5510 P5520
- django+ajax
- 四:BeanFactory来获取bean对象