假如现有代码如下:
int fun1(int a, int b){return a>b?a:b;}
char& fun1(int a, int b){return a>b?a:b;}
char *c = fun1(1, 2);
cout << c << endl;
以上伪代码是否有误,错误的地方在何处?
命令行输出的是什么?
可否称返回值为char的fun1函数为fun1的重写?
有用望采纳
这份代码存在以下几个错误:
fun1() 函数有重载,一个函数返回int类型,另一个函数返回char&类型,但它们有相同的函数名和参数列表。
当调用 fun1(1, 2) 时,编译器不能解析该函数是返回int类型还是char&类型。
返回char&类型的fun1函数的返回值是一个不合法的引用,因为它返回了一个临时对象。
以下是优化代码:
#include <iostream>
#include <cmath>
int fun1(int a, int b){return a>b?a:b;}
int main()
{
int c = fun1(1, 2);
std::cout << c << std::endl;
return 0;
}
说明:
原代码存在类型不匹配的错误,将 char& 改为 int。
原代码存在试图将返回值地址赋值给指针的错误,将返回值直接赋值给变量 c。
加入头文件 cmath。
使用 std::cout 输出。
输出结果为:2
说明第二个fun1函数没有被使用。
有多个错误的地方: