带有默认值的函数和普通函数有什么区别||inline(内联)函数和普通函数的区别||函数重载的相关问题||c++

1.带有默认值的参数和普通函数有什么区别?

普通函数和带有默认值参数的函数有什么区别?

答:首先,带默认值参数的函数,调用时可以不传入实参;并且形参的默认值必须从右往左给,形参的,默认值只能给一次不能给多次。

其次,涉及一点底层,带有默认值的参数在调用时虽然没有传入实参,但是汇编上还是要生成push汇编指令的,把形参的默认值进行压栈,所以从汇编上来讲,并没有说你少传一个实参就能节省汇编指令,提高效率之说!

2.内联函数和普通函数的区别

答:首先,内联函数就是给普通函数的定义前面加个inline关键字,普通函数的调用有调用开销,而内联函数没有;内联函数是在调用点把函数的代码展开:内联哈数必须在调用点之前出现,只能在本文件作用域可见,内联函数在release版本下才起作用,在debug版本下不起作用,内联只是对编译器的建议,是否真的要处理成内联函数,最终还是要编译器来决定。

内联函数和普通函数最大的区别就是,在编译阶段完成后生成的obj文件中,普通函数是要在符号表生成符号的,而内联函数在编译阶段就被处理了,在函数调用点把函数代码展开,因此在符号表中,内联函数根本没有符号,因此无法进行链接,因此内联函数只在本文件中才可见,一般都写在头文件当中,被源文件包含使用,内联减少了函数的调用栈帧的开辟和回退,提高了调用效率。

3.函数重载

函数重载需要满足的条件为:
函数名相同,参数类型不同或者参数个数不同或参数顺序不同。注意返回型类型不能作为重载函数的条件。

一个实例:


int ShowValue(int value)

{
	cout << value << endl;
}
//函数名相同、形参个数不同
int ShowValue(int value, int vlueA)

{
	cout << value << valueA << endl;
}
//函数名相同、形参类型不同
int ShowValue(int value, float valueA)
{
}
//函数名相同、形参位置顺序不同
int ShowValue(float valueA, int value)
{
}
发布了124 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42214953/article/details/105111056