- 浏览: 692462 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (181)
- Matlab (16)
- Java (26)
- autoHotkey (4)
- openCV (1)
- C++ (50)
- PDF-XChange Viewer (2)
- 学术 (11)
- javascript (4)
- linux (11)
- SWT (9)
- latex (7)
- GAE (2)
- windows (6)
- C# (3)
- PS (20)
- JNI (4)
- latex,批处理 (0)
- 批处理 (4)
- Android (5)
- 矩阵论 (1)
- SVM (1)
- 概率图模型 (0)
- Python (12)
- Eigen (5)
- 编程题 (1)
- MKL (1)
- 神经网络 (9)
- 最优化 (2)
- 摄影 (1)
- PPT (0)
- After Effects (3)
- CUDA (3)
- caffe (0)
- MXNet (2)
- svn (1)
- R (0)
- 虚拟机 (0)
- tensorflow (7)
- theano (1)
- Keras (1)
- vim (1)
- xgboost (1)
- spark (6)
- eclipse (2)
- word2vec (0)
- hadoop (1)
- dmlc (1)
- git (0)
最新评论
-
jeffersonz:
请问大神,这个插件记录下来的脚本为什么不能再Extendscr ...
PhotoShop - 记录PS的所有操作为JavaScript代码 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道cherish ...
Eigen的编译选项;MKL的使用 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道 您好,您的工 ...
Eigen的编译选项;MKL的使用
C++中 直接调用、函数指针、std::function效率对比
调用次数:10亿次
CPU: i7 860 (主频2.8GHz)
测试结果: 函数指针要比直接调用慢2s左右;std::function 要比函数指针慢2s左右
貌似std::function调用时多了一句if语句的判断,用于测试是否绑定了函数。
结果及代码如下
调用次数:10亿次
CPU: i7 860 (主频2.8GHz)
测试结果: 函数指针要比直接调用慢2s左右;std::function 要比函数指针慢2s左右
貌似std::function调用时多了一句if语句的判断,用于测试是否绑定了函数。
结果及代码如下
/** @file @brief 测试C++11 中 function的效率 */ #include <functional> #include <iostream> #include <typeinfo> #include <chrono> //待封装的函数 int testEfficiency (int i, int j) { for (size_t ii = 0; ii < 5; ii++) { i += i - ii; } if (i < j) return i + 7 * j; else return i - 3 * j; } typedef std::function<int (int, int) > FuncInt_IntInt; using funcInt_IntInt = int (*) (int, int); //函数指针 int main() { int a = 1; int b = a; int c = a; int testNum = 1E9; FuncInt_IntInt fFunctional = testEfficiency; funcInt_IntInt fFuncPtr = testEfficiency; std::cout << "函数原型类型:\t\t" << typeid (testEfficiency).name() << std::endl; std::cout << "std::funciton类型:\t" << typeid (fFunctional).name() << std::endl; std::cout << "函数指针类型:\t\t" << typeid (fFuncPtr).name() << std::endl; std::chrono::time_point<std::chrono::system_clock> start, end; start = std::chrono::system_clock::now(); for (size_t i = 0; i < testNum; i++) { a = testEfficiency (a, 2); } end = std::chrono::system_clock::now(); std::cout << "直接调用耗时:\t\t" << std::chrono::duration<double> (end - start).count() << "秒" << std::endl; start = std::chrono::system_clock::now(); for (size_t i = 0; i < testNum; i++) { b = fFunctional (b, 2); } end = std::chrono::system_clock::now(); std::cout << "使用std::function耗时:\t" << std::chrono::duration<double> (end - start).count() << "秒" << std::endl; start = std::chrono::system_clock::now(); for (size_t i = 0; i < testNum; i++) { c = fFuncPtr (c, 2); } end = std::chrono::system_clock::now(); std::cout << "使用函数指针耗时:\t" << std::chrono::duration<double> (end - start).count() << "秒" << std::endl; std::cout << "a=" << a << std::endl; std::cout << "b=" << b << std::endl; std::cout << "c=" << c << std::endl; }
发表评论
-
C++函数中的静态变量
2019-07-19 11:22 820在C++中,可以在成员函数中使用静态变量,从而间接达到在hpp ... -
tensorflow 静态编译笔记 -- linux系统
2018-11-05 14:26 0注: 1、编译tensorflow静态库 很简单,参见: h ... -
gperftools笔记
2018-06-27 14:30 0export LD_LIBRARY_PATH=LD_LIBR ... -
dmlc分布式线性模型编译笔记
2018-06-06 10:37 21781、使用第三方修改后的wormhole工程 原始工程wor ... -
C++中读取控制台输出,并将文件指针FILE*转换为istream
2017-11-27 15:03 1842解决的问题: 1、通过执行系统的bash命令后,获取其输出( ... -
c++中使用boost库在共享内存中存储map
2017-11-09 11:37 5429boost库中的interprocess包可以在共享内存中创建 ... -
近似最近邻算法库FLANN
2017-04-25 18:45 0FLANN库是计算近似最近邻的库, 问题定义如下: 给定距离函 ... -
C++杂记-- 重定向std::cout等
2017-04-18 17:28 19721、屏蔽std::cout 参见:http://stackov ... -
CMake指定目标代码的平台(win32,x64)
2016-06-03 20:54 11729主要参考自:http://blog.c ... -
windows 10下安装GPU版MXNet
2016-06-03 21:28 8591上回说到编译CPU版的MXNet: http://cheris ... -
windows下安装CPU版mxnet
2016-05-23 23:14 17597MXnet (mix net)类似Caffe,Tensorfl ... -
Linux C++编译及 静态/动态 链接库 笔记
2015-12-20 19:49 60561、C++文件的编译 g++参 ... -
Linux (Ubuntu) 下 Eclipse C++ 环境配置
2015-12-08 21:49 19601、安装JDK 参见http://blog.csdn.net/ ... -
Photoshop插件开发-filter
2015-10-11 22:53 3374初学,,感觉PS插件的文档很烂,,教程也很少,,也就这么简单学 ... -
使Visual Assist X支持CUDA的.cu文件的代码提示
2015-07-17 00:05 2305现在安装CUDA很方便了,直接支持Visual Studio。 ... -
CUDA程序block和thread超出硬件允许值时的异常
2015-07-13 11:32 3755调用CUDA的核函数时指定block 和 thread大小,该 ... -
创建及使用DLL
2014-09-29 15:22 1233此篇仅作简要的记录,作为备忘。 更为详细的可以参考:http: ... -
matlab的mexFunction中使用std::cout(部分转载)
2014-09-27 15:37 2163在matlab、C++混合编程的时候,可能会用到之前的代码。代 ... -
Eigen库:那些年我们一起经历的bug
2014-09-24 18:39 18631、使用auto声明新变量 ... -
C++:无虚函数的类作为有虚函数类的父类时产生Expression:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
2014-09-24 09:48 2005调程序时忘了为啥,写了一小段测试程序,再简单不过,结果跑出了E ...
相关推荐
std::function 是一个可调用对象的包装器,用于存储和调用函数指针。std::function 可以绑定到全局函数、类静态成员函数或 lambda 表达式。std::function 的定义是 std::function(param1, param2, ...)>,其中 return...
**std::function**是C++11标准库中的一个类模板,用于封装任何可调用对象(如函数指针、成员函数指针、函数对象或lambda表达式)。它的优势在于可以将不同类型的可调用对象存储在一个统一的接口中,提供了类型安全和...
在C++编程中,`std::function`是一个强大的工具,它是C++11标准引入的新特性,用于封装和管理各种可调用实体,如普通函数、Lambda表达式、函数指针以及自定义的函数对象。这个特性使得在C++程序中更加灵活地处理函数...
还是函数指针提供了动态调用功能,或者是lambda表达式和仿函数提高了代码的可读性和封装性,再到`std::function`和`std::bind`提供了更强大的函数对象和参数绑定能力,都在不同层面上提升了C++的编程体验。
在C++编程中,通过字符串调用函数是一种高级特性,通常涉及到函数指针、元编程或者更复杂的语言机制。这个示例代码可能演示了如何在运行时根据字符串内容找到并执行相应的函数。这种技术在某些场景下非常有用,比如...
C++20引入了`std::function_object_adapter`,它可以直接将成员函数转换为可调用对象,简化了成员函数作为回调的使用: ```cpp auto callback = std::function_object_adapter, void(int)>(obj, &MyClass::...
在C++编程中,函数指针是一个非常重要的概念,它允许我们存储函数的地址并可以在程序的不同地方调用。函数指针分为两类:一般(普通)函数指针和类成员函数指针。这两种类型的指针在用法上有所区别,且类成员函数...
在C++中,我们可以通过typedef或者std::function来声明类函数指针类型。例如: ```cpp class MyClass { public: void myFunction(int arg); }; typedef void (MyClass::*MyClassFuncPtr)(int); // 类函数指针类型...
在C++中,除了使用函数指针,还可以使用成员函数指针或者std::function来实现回调。成员函数指针适用于类的成员函数作为回调的情况,而std::function则提供了更灵活的回调机制,可以存储任何可调用对象,包括普通...
在C++编程中,函数指针是一个非常强大的工具,它允许我们将函数作为其他函数的参数或者存储在变量中。在本示例中,“函数指针万能打印”着重讲解如何利用函数指针实现一个通用的打印系统,可以适应各种数据类型的...
在 <functional> 头文件中, std::function 是个可调用Callable对象的容器,可以容纳 函数、函数指针、lambda表达式、成员函
在C++11及更高版本中,`std::function`和`std::bind`提供了更现代、更灵活的方式来处理成员函数,它们可以包装任何可调用对象,包括成员函数指针,而且使用起来更加简洁。 总的来说,C++中的成员函数指针和functor...
### C++函数指针详解 #### 一、引言 函数指针是在C++编程语言中一种非常重要的特性,它允许程序员将函数当作数据来处理。通过对函数的指针进行操作,可以实现很多高级功能,比如动态绑定、回调函数、多态等。本文...
由于成员函数需要对象实例才能被调用,因此在创建线程时需要提供对象的引用或指针。 ```cpp MyClass obj; std::thread my_thread(&MyClass::threadFunction, &obj, 42); // 42 是传递给成员函数的参数 ``` 三、...
在简单的实现中,`std::function`通常会有一个内部的函数指针成员变量,用于存储实际的可调用对象。例如: ```cpp template , typename... Args> class function(Args...)> { private: Result (*function_)(Args.....
`std::function`是C++11引入的一个模板类,它提供了一种类型安全的方式来封装任何可调用对象,如普通函数、成员函数、lambda表达式、函数指针等。`std::function`的声明通常包括返回类型和参数列表,例如`std::...
这通常涉及到保存C++函数指针的用户数据,然后在Lua中通过元方法或特殊协议调用。 10. **调试和日志**:在集成过程中,添加适当的调试输出和日志记录有助于定位问题。可以使用`luaL_error`或自定义的错误处理函数抛...
本文将深入探讨如何在多线程环境中调用C++的成员函数,并有效地使用类中的成员变量。 一、C++成员函数成为线程函数 1.1 为什么要在线程中调用成员函数 在多线程应用中,通常需要在线程中执行特定任务,这些任务...