Step to UEFI (289)Cpp UEFI 005 C++函数默认参数

C++ 定义函数时可以直接给形参指定默认值,如果调用函数没有给形参赋值,那就直接使用默认值。这个功能非常容易理解。编写如下代码进行验证:

#include <UEFI/UEFI.h>
#include <type_traits>

EFI_SYSTEM_TABLE* gSystemTable;

void printInt(EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL* conOut, int value) {
	CHAR16 out[32];
	CHAR16* ptr = out;
	static_assert(std::is_unsigned_v<char16_t>);
	if (value == 0)
	{
		conOut->OutputString(conOut, u"0");
		return;
	}

	ptr += 31;
	*--ptr = 0;
	int tmp = value;// >= 0 ? value : -value; 

	while (tmp)
	{
		*--ptr = '0' + tmp % 10;
		tmp /= 10;
	}

	if (value < 0) *--ptr = '-';
	conOut->OutputString(conOut, ptr);
}

void func(int a, int b=2, int c=3){
    printInt(gSystemTable->ConOut,a);
	gSystemTable->ConOut->OutputString(gSystemTable->ConOut, u"\r\n");
	printInt(gSystemTable->ConOut,b);
	gSystemTable->ConOut->OutputString(gSystemTable->ConOut, u"\r\n");
	printInt(gSystemTable->ConOut,c);
	gSystemTable->ConOut->OutputString(gSystemTable->ConOut, u"\r\n");
}

EFI_STATUS
efi_main(EFI_HANDLE /*image*/, EFI_SYSTEM_TABLE* systemTable)
{
	gSystemTable=systemTable;
	func(30);
	return EFI_SUCCESS;
}

上面定义了 void func(int a, int b=2, int c=3) 这个函数,当通过func(30)调用时,相当于只给 a 赋值 30,其余的直接使用了默认值。

需要注意的是,在使用时有一些限制。比如:C++规定,默认参数只能放在形参列表的最后,而且一旦为某个形参指定了默认值,那么它后面的所有形参都必须有默认值。

参考:

1. https://c.biancheng.net/view/2204.html C++函数的默认参数详解

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注