gpt4 book ai didi

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

转载 作者:我是一只小鸟 更新时间:2023-06-15 06:31:23 25 4
gpt4 key购买 nike

某日二师兄参加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 的实例没有办法被内联.

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

关注我,带你21天“精通”C++!(狗头) 。

最后此篇关于C++面试八股文:在C++中,有哪些可执行体?的文章就讲到这里了,如果你想了解更多关于C++面试八股文:在C++中,有哪些可执行体?的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com