C++面试之你知道有哪些可执行体吗

 更新时间:2023年06月15日 08:32:44   作者:二进制架构  
可执行体其实也叫可调用对象,这也是面试常常会考到的问题,这篇文章就来和大家详细讲讲C++中的可执行体,感兴趣的小伙伴可以了解一下

某日二师兄参加XXX科技公司的C++工程师开发岗位第14面:

面试官:在C++中,有哪些可执行体?

二师兄:可执行体?

面试官:也就是可调用对象。

二师兄:让我想一想。函数、函数指针、类的静态方法、类的成员方法、仿函数、lambda表达式。

面试官:能说一说他们之间有什么区别吗?

二师兄:好的。函数是一段代码,执行特定任务,接受参数并返回值。

int add(int a, int b)
{
    return a + b;
}

二师兄:函数指针是指向函数的指针。

int add(int a, int b)
{
    return a + b;
}

using addptr = int(*)(int,int);
addptr ptr = &add;	//函数指针
int sum = addptr(1,2);

二师兄:类的静态方法和函数基本一致,只不过此静态方法属于整个类所有。而成员方法则只能通过类的实例来调用。

class Foo
{
public:
    static int add(int a, int b) { return a + b;}	//静态方法
    int add2(int a, int b) { return a + b; }		//成员方法
};
int sum1 = Foo::add(1,2);
Foo f;
int sum2 = f.add2(2,1);

二师兄:仿函数是一个类或结构体,重载了()运算符。

struct Add
{
  	int operator()(int a, int b) { return a+ b;}  
};

int sum = Add()(1,2);

二师兄:lambda表达式在C++11时被引入,本质上是是一个匿名函数。

auto add = [](int a, int b) {return a + b;};
int sum = add(1,2);
//or
int a =1 , b = 2;
auto ladd = [a,b](){return a + b;};
int sum = ladd();

面试官:你知道std::function?

二师兄:哦,这个标准也是在C++11引入的,它的对象可以把以上所说的可执行体保存起来。

std::function<int(int,int)> add_fun;
add_fun = add;
add_fun = ptr;
add_fun = Foo::add;
add_fun =std::bind(&Foo::add2,&f,std::placeholders::_1,std::placeholders::_2);
add_fun = Add();
add_fun = ladd;

面试官:那你知道以上可执行体之间的性能有何差别吗?

二师兄:额,性能应该差不多吧。。

面试官:好的,回去等通知吧。

今日二师兄的表现不错,让我们看一下面试官的最后一个问题:

知道以上可执行体之间的性能有何差别吗?

从性能上讲,函数、类的静态/成员方法(非虚方法)、仿函数和lambda表达式的性能基本相同,而函数指针和std::function的性能要差一些。因为函数指针和std::function的实例没有办法被内联。

好了,今日份面试到这里就结束了。 让我们一起期待明天二师兄的表现吧。

到此这篇关于C++面试之你知道有哪些可执行体吗的文章就介绍到这了,更多相关C++可执行体内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Qt使用OpenGL实现绘制3D图形

    Qt使用OpenGL实现绘制3D图形

    OpenGL是一个跨平台的、用来渲染3D图形的标准API,Qt对OpenGL提供了强大的支持,所以本文就来和大家介绍一下Qt如何使用OpenGL实现绘制3D图形吧
    2023-10-10
  • C++编程中的const关键字常见用法总结

    C++编程中的const关键字常见用法总结

    这篇文章主要介绍了C++编程中的const关键字常见用法总结,const关键字的使用是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-11-11
  • 使用MySQL编程实现C语言功能强大化步骤示例

    使用MySQL编程实现C语言功能强大化步骤示例

    这篇文章主要为大家介绍了使用MySQL编程实现C语言功能强大化步骤示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • C++构建缓存加速的实现示例

    C++构建缓存加速的实现示例

    本文主要介绍了C++构建缓存加速的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-10-10
  • break的使用for循环嵌套示例

    break的使用for循环嵌套示例

    这篇文章主要介绍了break的使用for循环嵌套示例,需要的朋友可以参考下
    2014-02-02
  • C++解决业务办理时间问题示例解析

    C++解决业务办理时间问题示例解析

    这篇文章主要为大家介绍了C++解决业务办理时间问题示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • C++实现封装的顺序表的操作与实践

    C++实现封装的顺序表的操作与实践

    在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能较低,本文将详细介绍如何用 C++ 语言实现一个封装的顺序表类,深入探讨顺序表的核心操作
    2025-02-02
  • C++类型转换归纳总结

    C++类型转换归纳总结

    这篇文章主要介绍了C++类型转换归纳总结,通过本文可以加深读者对于C++变量类型及其相互转换方法的理解,需要的朋友可以参考下
    2014-07-07
  • 详解C++二叉搜索树的原理及实现

    详解C++二叉搜索树的原理及实现

    二叉搜索树又称二叉排序树,二叉搜索树是一种二叉树,其中每个节点的值大于其左子树中的任何节点,并且小于其右子树中的任何节点,本文小编就给大家讲讲C++二叉搜索树的操作及实现,感兴趣的同学跟着小编一起来看看吧
    2023-08-08
  • Win32应用程序(SDK)设计原理详解

    Win32应用程序(SDK)设计原理详解

    这篇文章主要介绍了Win32应用程序(SDK)设计原理,对于理解win32应用程序运行原理有很大的帮助,需要的朋友可以参考下
    2014-08-08

最新评论