首页 > 编程语言 >C++面试八股文:在C++中,有哪些可执行体?

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

时间:2023-06-14 23:45:59浏览次数:34  
标签:std 八股文 int C++ 面试 add return 师兄

某日二师兄参加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++!(狗头)

标签:std,八股文,int,C++,面试,add,return,师兄
From: https://www.cnblogs.com/binarch/p/17481652.html

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:分割回文串
    题目:给你一个字符串s,请你将s分割成一些子串,使每个子串都是回文串。返回s所有可能的分割方案。回文串是正着读和反着读都一样的字符串。 示例1:输入:s="aab"输出:[["a","a","b"],["aa","b"]]示例2:输入:s="a"输出:[["a"]]代码实现:classSolution{bo......
  • 【面试宝典】打工仔生存指南
    近日求职多有波折,察觉到自己的浅显无知,特此给准备找工作的应届生朋友们一点借鉴,也欢迎诸位有多年工作经验的大佬们多多补充。    一.五险一金 五险一金指的是:养老保险:包括基本养老金、病残津贴、丧葬补助金和抚恤金(连本带利累积到退休后才可以领)①领取条件:达到......
  • C++类型转换详解--const_cast
    一.函数描述:const_cast<type-id>(expression)主要是用来去掉const属性,当然也可以加上const属性。主要是用前者,后者很少用。去掉const属性:const_case<int*>(&num),常用,因为不能把一个const变量直接赋给一个非const变量,必须要转换。加上const属性:constint*k=const_case......
  • C++ 深入理解const_cast转换运算符
    const_cast转换运算符我们在RTTI和类型转换运算符中详细介绍过它的用法和使用场景,今天我们对其进一步了解一下。首先我们回忆一下它的作用和用法。const_cast的基本使用const_cast运算符用于执行只有一种用途的类型转化,即改变const或volatile。用法如下:const_cast<type_name>......
  • 正确使用C++的const_cast
    C++的四种类型转换之const_cast前言引用《EffectiveC++中文版第三版》中条款27"尽量少做转型动作"中的一段话:C++规则的设计目标之一是,保证“类型错误”绝对不可能发生,理论上如果你的程序很“干净”的通过编译,就表示它并不企图在任何对象上执行任何不安全、无意义、愚蠢......
  • C++面试八股文:C++中,设计一个类要注意哪些东西?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第9面:面试官:C++中,设计一个类要注意哪些东西?二师兄:设计一个类主要考虑以下几个方面:1.面向对象的封装、继承及多态。2.bigthree或者bigfive。3.运算符和函数重载、静态成员、友元、异常处理等相关问题。面试官:请介绍一下面向......
  • 《C++》对象的初始化和清理
    不设计构造和析构函数 编译器会提供空语句的构造和析构初始化--构造函数无返回类型函数名与类名相同构造函数可以有参数可以发生重载创建对象的时候构造函数会自动调用且只调用一次classPerson{public: Person() { cout<<"无参构造函数调用"<<endl; }Person(inta......
  • C++ const_cast用法
    原文C++const_cast用法const_cast是一种C++运算符,主要是用来去除复合类型中const和volatile属性(没有真正去除)。变量本身的const属性是不能去除的,要想修改变量的值,一般是去除指针(或引用)的const属性,再进行间接修改。用法:const_cast<type>(expression)通过const_cast运算符,也只......
  • [C++/PTA] 有序数组(类模板)
    题目要求实现一个类模板,它可以接受一组数据,能对数据排序,也能输出数组的内容。每行输入的第一个数字为0,1,2或3:为0时表示输入结束;为1时表示将输入整数,为2时表示将输入有一位小数的浮点数,为3时表示输入字符。如果第一个数字非0,则接下来将输入一个正整数,表示即将输入的数据的数量......
  • [C++/PTA] 2017Final 圆周率山
    题目要求为了参加学校的社团风采展,怡山小学数学组的同学们决定画一座圆周率山,以宣传圆周率。已知圆周率为:3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253......