【技术研究】缺省函数,内联函数

TEC

Posted by Corax on January 9, 2024

缺省函数(默认函数)

void my_setlocale(int category, const char* locale = "chinese") {
	cout << category << " " << locale << endl;
}

int main() {
	my_setlocale(LC_ALL);
	setlocale(LC_ALL, "chinese");
	wprintf(L"你好");

	return 0;
}

上面进行定义其实就是进行默认参数的设置,在调用时不用管他了

而要修改的话,一样调用就可以

image-20240110094452563

甚至可以一个参数都不要

image-20240110094619900

但不能越过前面的直接修改后面的默认参数

同时声明和定义不能同时定义默认函数,缺省参数最好放在声明中。

函数 在维护性好,节省空间(场景)但是性能低

那么类似简单运算,运算写在代码当中性能更好,但相对维护性差。

而宏解决维护性方面的问题。

但是在需要内存申请的时候,函数性价比大部分时候优于宏。

函数永远就100000个字节,而宏定义几次,搞多少字节出来

image-20240110110534911

同时带参宏有些参数类型bug,且无法调试

内联函数

由于我们无法知道什么时候使用函数或者宏性价比高,所以有了内联函数,编译器会估算性能的使用,选择以宏的方式进行函数展开(等于说在调用处展开内联函数实现代码,并替换参数),或者以函数进行调用。

最好放在.h

所以是由编译器决定是否内联。

#include<iostream>
using namespace std;

void my_setlocale(int category = LC_ALL, const char* locale = "chinese") {
	cout << category << " " << locale << endl;
}

inline int my_sub(int n, int m) {
	return n - m;
}

int main() {
	
	cout << my_sub(2, 1) << endl;

	return 0;
}

要注意的是调试版必定不内联(方便调试)

如下图两张对比

image-20240110112756205

image-20240110112913147

名称粉碎和对应解码程序uname.exe