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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

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

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

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

二师兄:可执行体?

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

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

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

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

intadd(inta,intb)

returna+b;

}

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

intadd(inta,intb)

returna+b;

usingaddptr=int(*)(int,int);

addptrptr=add;//函数指针

intsum=addptr(1,2);

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

classFoo

public:

staticintadd(inta,intb){returna+b;}//静态方法

intadd2(inta,intb){returna+b;}//成员方法

intsum1=Foo::add(1,2);

Foof;

intsum2=f.add2(2,1);

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

structAdd

intoperator()(inta,intb){returna+b;}

intsum=Add()(1,2);

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

autoadd=[](inta,intb){returna+b;};

intsum=add(1,2);

inta=1,b=2;

autoladd=[a,b](){returna+b;};

intsum=ladd();

面试官:你知道std::function

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

std::functionint(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的实例没有办法被内联。

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

文档评论(0)

157****2177 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档