必背八股文-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、京东、中兴、比特大陆|算能、美团等等