有没有办法进行编译?
并使它使用带有整数默认值的fct?
使用g ++。
#include <stdio.h>
int fct(int a = 0)
{
printf("a: %d\n", a);
return (0);
}
void fct()
{
}
int main(void)
{
fct();
return (0);
}
答案 0 :(得分:6)
不,因为一旦你向fct(int)
添加了默认值,编译器无法猜出你要调用哪一个:
fct(int)
,默认值为arg fct()
您可以做的是删除默认值,然后调用fct(0)
或完全删除没有参数的那个。
答案 1 :(得分:1)
C ++不会让你编译不明确的代码。如果代码中存在歧义,则必须尝试解决它。
函数不能重载,仅在返回类型上有所不同。
查看此链接以获取示例。 http://xania.org/200711/ambiguous-overloading
以下内容仅适用:
#include <stdio.h>
int fct(int a)
{
printf("a: %d\n", a);
return (0);
}
void fct()
{
printf("a: 0\n", a);
}
int main(void)
{
fct();
return (0);
}
答案 2 :(得分:0)
您不能仅通过返回类型重载函数。让我列出为您的案例生成的函数
int fct(int a = 0)
将生成两个函数(一个带参数,一个没有):
int fct(int a)
和int fct()
除了上述功能,您还引入了另一种方法
void fct()
所以你有两种方法,不同的是返回类型
void fct()
和int fct()
在C ++中, CAN NOT 仅使用返回类型的变体重载函数