C++函数签名与函数类型

在C++中,函数签名和函数类型是两个不同的概念,但它们之间有一定的联系。

函数签名

函数签名是指函数的特征标识,它包括函数的名称、参数的数量、参数的类型(不包括参数的名称)以及函数的 const 限定符和 volatile 限定符。函数签名用于区分不同的函数,并且在函数重载、函数指针和函数类型推导等场景中起到重要作用。
函数签名不同的函数:

// func A
void func(int a);

// func B
void func(double a);

以上两个函数名称相同但参数类型不同所以可以构成重载关系,由于函数签名不同因此可以区分为不同的函数。
函数签名相同的函数:

void func(int a);

void func(int a) noexcept;

int func(int a);

函数返回值、noexcept说明符均不属于函数签名的一部分,因此以上函数若是出现在同一命名空间则会出现函数重定义的错误。

函数类型

函数类型是指函数的数据类型,包括函数的返回类型、参数类型、CV限定符、异常说明符及属性(C++17引入属性)。在C++中,函数类型可以是函数指针类型或函数引用类型。
:::info
Note:
在C++11至C++17(不包括C++17)规范中,noexcept声明符不是函数类型的一部分。
在C++17及以后的标准中,noexcept声明符则是函数类型的一部分。
:::
具有相同函数类型的函数

// func A
int add(int a, int b);

// func B
int subtract(int x, int y);

以上两个函数的类型都是int(int, int)类型,该类型函数的函数指针类型为int(*)(int,int),该类型函数的函数引用类型为int(&)(int,int)
具有不同函数类型的函数

// func A
int add(int a, int b);

// func B
double subtract(double x, double y);
posted @ 2024-04-29 16:06  漫山华  阅读(50)  评论(0编辑  收藏  举报