面试官:在C++中,有哪些可执行体?
二师兄:可执行体?
面试官:也就是可调用对象。
二师兄:让我想一想。函数、函数指针、类的静态方法、类的成员方法、仿函数、lambda表达式。
面试官:能说一说他们之间有什么区别吗?
二师兄:好的。函数是一段代码,执行特定任务,接受参数并返回值。
二师兄:函数指针是指向函数的指针。
二师兄:类的静态方法和函数基本一致,只不过此静态方法属于整个类所有。而成员方法则只能通过类的实例来调用。
二师兄:仿函数是一个类或结构体,重载了()运算符。
二师兄:lambda表达式在C++11时被引入,本质上是是一个匿名函数。
面试官:你知道std::function?
二师兄:哦,这个标准也是在C++11引入的,它的对象可以把以上所说的可执行体保存起来。
面试官:那你知道以上可执行体之间的性能有何差别吗?今日二师兄的表现不错,让我们看一下面试官的最后一个问题:
二师兄:额,性能应该差不多吧。。
面试官:好的,回去等通知吧。
知道以上可执行体之间的性能有何差别吗?从性能上讲,函数、类的静态/成员方法(非虚方法)、仿函数和lambda表达式的性能基本相同,而函数指针和std::function的性能要差一些。因为函数指针和std::function的实例没有办法被内联。
关注我,带你21天“精通”C++!(狗头)
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |