这是超载吗?
Is this overloading?
如果我有两个这样的函数:
int f ( int a )
{}
void f ( signed a )
{}
他们超载了吗?
当我在 main()
中调用 f(5)
时,出现错误:
old declaration ‘void f(int)’
类型说明符 signed
和 int
(单独使用,没有其他类型说明符)定义相同的有符号整数类型。
也就是说你可以等价地写成例如
int a;
signed a;
signed int a;
int signed a;
所以问题中的函数具有相同的参数声明。
但是它们有不同的 return 类型
int f ( int a )
{ }
void f ( signed a)
{}
即同一个函数被不同的return类型重新定义。 return 类型不参与函数重载。
因此编译器发出一个错误,即同一个函数被不同的 return 类型定义了两次。
来自 C++ 14 标准(13.1 可重载声明)
2 Certain function declarations cannot be overloaded:
(2.1) — Function declarations that differ only in the return type
cannot be overloaded
如果您要更改其中一个函数中的参数声明,例如按以下方式
int f ( int a )
{ }
void f ( unsigned a)
{}
那么函数将被重载并且这个语句
f( 5 );
将调用第一个重载函数,因为整型文字 5
的类型为 int
..
如果我有两个这样的函数:
int f ( int a )
{}
void f ( signed a )
{}
他们超载了吗?
当我在 main()
中调用 f(5)
时,出现错误:
old declaration ‘void f(int)’
类型说明符 signed
和 int
(单独使用,没有其他类型说明符)定义相同的有符号整数类型。
也就是说你可以等价地写成例如
int a;
signed a;
signed int a;
int signed a;
所以问题中的函数具有相同的参数声明。
但是它们有不同的 return 类型
int f ( int a )
{ }
void f ( signed a)
{}
即同一个函数被不同的return类型重新定义。 return 类型不参与函数重载。
因此编译器发出一个错误,即同一个函数被不同的 return 类型定义了两次。
来自 C++ 14 标准(13.1 可重载声明)
2 Certain function declarations cannot be overloaded:
(2.1) — Function declarations that differ only in the return type cannot be overloaded
如果您要更改其中一个函数中的参数声明,例如按以下方式
int f ( int a )
{ }
void f ( unsigned a)
{}
那么函数将被重载并且这个语句
f( 5 );
将调用第一个重载函数,因为整型文字 5
的类型为 int
..