关于重载函数的执行顺序有关问题
关于重载函数的执行顺序问题
正在学习C++,看到函数重载部分有一个示例,代码如下:
#include <iostream>
#include <iomanip>
using namespace std;
double larger(double a, double b);
long& larger(long& a, long& b);
int main()
{
cout << endl;
cout << "Larger of 1.5 and 2.5 is " << larger(1.5, 2.5) << endl;
int value1 = 35;
int value2 = 25;
cout << "Larger of " << value1 << " and " << value2 << " is "
<< larger(static_cast<long>(value1), static_cast<long>(value2))
<< endl;
return 0;
}
// Function to return the larger of two floating point values
double larger(double a, double b)
{
cout << " double version. ";
return a>b ? a : b;
}
// Return the larger of two long references
long& larger(long& a, long& b)
{
cout << " long ref version. ";
return a>b ? a : b;
}
输出结果如下:
double larger() called.
The larger of double values 1.5 and 2.5.
double larger() called.
The larger of int values 35 and 25 is 35
这个例子2次都调用double版本函数的原因我知道,但对语句的输出顺序有点疑问:函数从main()开始执行,应该先输出The larger of double values 1.5 and 2.5.才调用重载函数输出double larger() called呀,怎么先输出的是double larger() called.这句呢?求高手解答!
------解决方案--------------------
这是未定义行为
输出 "Larger of 1.5 and 2.5 is " 和larger函数调用顺序是不确定的
------解决方案--------------------
下个断点看看吧!
------解决方案--------------------
根据你传入数据的类型去调用对应参数类型的函数,跟执行顺序无关。
------解决方案--------------------
不确定就是不知道,就算是同一个编译器,这次编译是这个顺序,下次编译是另外一个顺序。都是有可能的
正在学习C++,看到函数重载部分有一个示例,代码如下:
#include <iostream>
#include <iomanip>
using namespace std;
double larger(double a, double b);
long& larger(long& a, long& b);
int main()
{
cout << endl;
cout << "Larger of 1.5 and 2.5 is " << larger(1.5, 2.5) << endl;
int value1 = 35;
int value2 = 25;
cout << "Larger of " << value1 << " and " << value2 << " is "
<< larger(static_cast<long>(value1), static_cast<long>(value2))
<< endl;
return 0;
}
// Function to return the larger of two floating point values
double larger(double a, double b)
{
cout << " double version. ";
return a>b ? a : b;
}
// Return the larger of two long references
long& larger(long& a, long& b)
{
cout << " long ref version. ";
return a>b ? a : b;
}
输出结果如下:
double larger() called.
The larger of double values 1.5 and 2.5.
double larger() called.
The larger of int values 35 and 25 is 35
这个例子2次都调用double版本函数的原因我知道,但对语句的输出顺序有点疑问:函数从main()开始执行,应该先输出The larger of double values 1.5 and 2.5.才调用重载函数输出double larger() called呀,怎么先输出的是double larger() called.这句呢?求高手解答!
------解决方案--------------------
这是未定义行为
输出 "Larger of 1.5 and 2.5 is " 和larger函数调用顺序是不确定的
------解决方案--------------------
下个断点看看吧!
------解决方案--------------------
根据你传入数据的类型去调用对应参数类型的函数,跟执行顺序无关。
------解决方案--------------------
不确定就是不知道,就算是同一个编译器,这次编译是这个顺序,下次编译是另外一个顺序。都是有可能的