必背八股文-C/C++(2)

指针常量、常量指针、常量引用

int * const p //指针常量

int a,b;

int * const p=&a //指针常量

//那么分为一下两种操作

*p=9;//操作成功

p=&b;//操作错误

因为声明了指针常量,说明指针变量不允许修改。如同指针指向一个地址该地址不能被修改,但是该地址里的内容可以被修改。

const int *p=&a //常量指针

//那么分为一下两种操作

*p=9;//操作错误

p=&b;//操作成功

因为常量指针本质是指针,并且这个指针是一个指向常量的指针,指针指向的变量的值不可通过该指针修改,但是指针指向的值可以改变。

常量引用:

double a;

const int &r = a;    //正确

const int &r = 10;  //正确

关键字inline的作用

inline是C++语言中的一个关键字,用于修饰函数,在编译器编译时将函数调用处直接展开为函数体,从而避免了函数调用的开销,提高程序的运行速度。具体作用如下:

• inline修饰的函数在编译时将被直接展开为函数调用处的代码,从而避免了函数调用的开销,提高程序的运行速度。

• inline函数一般都定义在头文件中,可以被多个源文件调用,不会引起重复定义的错误。

• inline函数不能使用递归调用,也不能包含复杂的循环结构或switch语句等。

内联函数与一般函数的区别

• 内联函数在编译器编译时将函数调用处直接展开为函数体,避免了函数调用的开销,提高程序的运行速度。

• 一般函数在编译器编译时不会展开函数调用,需要在程序运行时进行函数调用,会产生一定的函数调用开销。

内联函数的优缺点和适用场景是什么

内联函数的优点:

• 内联函数可以减少函数调用的开销,提高程序的运行速度。

• 内联函数定义在头文件中,可以方便地被多个源文件调用,不会引起重复定义的错误。

内联函数的缺点:

• 内联函数会增加代码的体积,导致可执行文件的大小增加。

• 内联函数不能包含复杂的循环结构、递归调用等,否则可能会导致代码膨胀。

内联函数适用场景:

• 内联函数适合于被频繁调用、函数体较小、函数参数较简单的函数,可以减少函数调用的开销,提高程序的运行速度。

• 内联函数不适合于包含复杂的循环结构、递归调用等的函数,否则可能会导致代码膨胀,降低程序的运行效率。

内联函数和宏定义的区别

宏定义是预处理器处理的文本替换,而内联函数是编译器处理的类型安全函数。

• 宏定义:宏定义是由预处理器(preprocessor)处理的文本替换。宏定义通常使用指令定义。当预处理器遇到宏定义调用时,它会将宏定义展开,将宏定义直接替换到调用的地方。宏定义的优点是没有函数调用开销,但它也有以下缺点:

1)由于使用宏的时候,只是进行简单的字符替换,不会对类型进行检查,存在安全隐患。

2)由于宏是直接替换的,所以会导致代码稍微长一点。

3)嵌套定义过多可能会影响程序的可读性,会容易出错。

4)边界效应。由于宏定义的时候,其各个分量未加括号,而在使用宏定义的时候,传递的参数是变量的表达式,然后经过系统展开后,由于优先级的原因,导致其结果不是你所希望的.

• 内联函数:内联函数是编译器处理的,使用关键字声明。内联函数的主要目的是建议编译器将函数调用替换为函数体,从而消除函数调用开销。内联函数具有以下优点:

1)inline定义的内联函数,函数代码被放入符号表中,在使用时进行替换(像宏一样展开),效率很高

2)类的内联函数也是函数。编绎器在调用一个内联函数,首先会检查参数问题,保证调用正确,像对待

真正函数一样,消除了隐患及局限性。

3)inline可以作为类的成员函数,也可以使用所在类的保护成员及私有成员。

缺点:

1)内联函数以复制为代价,活动产函数开销

2)如果函数的代码较长,使用内联将消耗过多内存

3)如果函数体内有循环,那么执行函数代码时间比调用开销大。

为什么不能把所有的函数写成内联函数?

• 内联函数展开后会增加代码的体积,导致可执行文件的大小增加,如果定义过多的内联函数会导致程序的运行速度变慢。

• 内联函数不能包含复杂的循环结构、递归调用等,否则可能会导致代码膨胀,降低程序的运行效率。

• 内联函数的展开由编译器决定,不一定能够被成功展开为内联代码。

构造函数、析构函数、虚函数可否声明为内联函数?

• 构造函数和析构函数声明为内联函数 构造函数和析构函数可以声明为内联函数,但是一般不建议这么做。因为构造函数和析构函数需要完成一些复杂的操作,如初始化和清理资源等,定义为

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏主要是介绍嵌入式软件开发岗位的相关知识和学习攻略,为大家提供一份笔试与面试手册。包括有嵌入式软件开发岗位介绍与学习攻略;校园招聘和offer疑惑问题的介绍;在笔试方面,如何刷题为笔试作准备,提供往年笔试真题;在面试方面,提供相关知识的复习重点,提供面试真题。包括有:华为、蔚来、文远、大疆、三一、深信服、亚马逊、Intel、百度、科大讯飞、OPPO、京东、中兴、比特大陆|算能、美团等等

全部评论
inline关键字现在貌似没有指示内联优化的作用了,作用变成定义可以在多个编译单元中重复出现,可以参考一下cppreference。
点赞 回复 分享
发布于 2023-05-10 20:59 陕西
大厂现在还问八股吗?
点赞 回复 分享
发布于 2023-05-10 21:00 四川
内联函数和宏定义的区别 那里没写全呢
点赞 回复 分享
发布于 2023-09-23 18:48 广东
我对memmove那里有疑惑,查资料memmove的原理是如果有地址覆盖,先将会覆盖的部分拷贝,没有涉及到临时缓存区 ----C语言中memcpy和memmove是一样的吗?
点赞 回复 分享
发布于 2023-09-25 10:35 广东

相关推荐

点赞 评论 收藏
分享
3 34 评论
分享
牛客网
牛客企业服务