我知道这是因为模板函数的返回类型与第一个参数(T)的返回类型相同.
如何修改此模板,使其在所有情况下都能正常运行?
#include <iostream>
using namespace std;
template <typename T, typename U>
T max(T x, U y)
{
return x>y ? x : y;
}
int main()
{
cout<<max(17.9,17)<<"\n";
cout<<max(17,17.9)<<"\n";
}
Run Code Online (Sandbox Code Playgroud)
输出:
17.9
17
Run Code Online (Sandbox Code Playgroud)
Naw*_*waz 10
您的实现行为是正确的,但您可能不需要该输出.代码中返回类型的问题.
如果可以使用C++ 11,则可能需要使用trailing-return类型:
template <typename T, typename U>
auto max(T x, U y) -> decltype(x>y ? x : y) //C++11 only
{
return x>y ? x : y;
}
Run Code Online (Sandbox Code Playgroud)
哪个会给出这个输出:
17.9
17.9
Run Code Online (Sandbox Code Playgroud)
我希望这是理想的输出.
在线演示:http://ideone.com/2Sh5Y
| 归档时间: |
|
| 查看次数: |
1388 次 |
| 最近记录: |