博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Effective_STL 学习笔记(三十八) 把仿函数类设计为用于值传递
阅读量:6930 次
发布时间:2019-06-27

本文共 697 字,大约阅读时间需要 2 分钟。

 

C 和 C++ 都不允许把真的函数作为参数传递给其他函数。取而代之,你必须传递指针给函数比如:

1   void qsort( void* base, size_t nmemb, size_t size,2              int( *cmpfcn )( const void*, const void* ) );

作为 cmpfcn 传递的实参是一个指向函数的指针,是从调用端拷贝给 qsort(值传递)。

C和C++标准库都遵循的一般准则: 函数指针是值传递

 

STL函数对象在函数指针之后成型,所以STL中的习惯是当给函数和从函数返回时函数对象也是值传递的(也就是拷贝),最好的考据就是 for_each 声明,for_each 通过值传递获取和返回函数对象:

1   template< class InputIterator, class Function >2   Function for_each( InputIterator first, InputIterator last, Function f );

 

因为函数对象是以值传递和返回,要确保传递时,函数对象的行为良好:

1. 函数对象应该很小,否则拷贝会很昂贵

2. 函数对象必须单态(非多态)—— 不能用虚函数,因为派生类对象以值传递代入基类会造成切割问题: 在拷贝时,它们的派生部分被删除。

禁止多态仿函数是不切实际的,的确有办法让大的和多态的函数对象仍然允许它们把以值传递仿函数的方式遍布 STL。

 

转载于:https://www.cnblogs.com/kidycharon/p/10043767.html

你可能感兴趣的文章
sys.path.insert(0, os.path.join('..', '..', '..', '..','...')) 解释
查看>>
开启mysql慢查询日志
查看>>
WEB项目的分层结构
查看>>
如果通过key获取dictionary里面的value
查看>>
【Java学习笔记】使用split()方法分割字符串
查看>>
我的架构经验系列文章 - 前端架构
查看>>
C#和C++的区别
查看>>
windows server 2003 sp2安装VS2010之后需要打的几个布丁
查看>>
推荐几个我日常使用的IT在线测试工具
查看>>
回合制页游
查看>>
IIS 内部运行机制
查看>>
解决PL/SQL Developer连接数据库时出现 “ORA-12541:TNS:无监听程序”错误。
查看>>
关于完成端口IOCP异步接收连接函数AcceptEx注意事项 (转)
查看>>
Android 编程下两种方式注册广播的区别
查看>>
实现个hash_map容器类玩玩 - 苍梧 - 博客园
查看>>
Max Sum(经典DP)
查看>>
« 静态编译的MySQL易挂起 »
查看>>
关于 Oracle 索引以及 Bitmap 索引 和 B-tree 索引(归档)
查看>>
[zt]提问的艺术
查看>>
Global Cache CR Requested But Current Block Received
查看>>