C++ 函数模板编译器错误
我制作了一个非常简单的程序来理解带有多个参数的函数模板,但是我一直从编译器那里得到这个错误消息。我已经看了很多遍这个程序,但我似乎不明白问题是从哪里来的。我真的很感激你的洞察力C++ 函数模板编译器错误,c++,C++,我制作了一个非常简单的程序来理解带有多个参数的函数模板,但是我一直从编译器那里得到这个错误消息。我已经看了很多遍这个程序,但我似乎不明白问题是从哪里来的。我真的很感激你的洞察力 #include <iostream> using namespace std; template <class FIRST, class SECOND> FIRST smaller(FIRST a, SECOND b) { return (a<b?a:b); } int m
#include <iostream>
using namespace std;
template <class FIRST, class SECOND>
FIRST smaller(FIRST a, SECOND b)
{
return (a<b?a:b);
}
int main()
{
int x = 21;
double y = 12.2;
cout << smaller(x,y) << endl;
}
#包括
使用名称空间std;
模板
第一个较小(第一个a,第二个b)
{
返回(a首先,这是一个警告而不是错误
它告诉您的是,您正在将double
隐式转换为int
。这将导致精度损失
转换之所以发生,是因为返回类型与第一个参数的类型相同,在您的示例中是int
以逃避警告(但如果您打开相应的编译器选项“将警告视为错误”,编译器会将其视为错误)关于从double转换为int时的精度损失,您可以按以下方式编写函数
template <class FIRST, class SECOND>
auto smaller(FIRST a, SECOND b) ->typename std::common_type<FIRST, SECOND>::type
{
return ( a < b ? a : b );
}
模板
自动缩小(第一个a,第二个b)->typename std::common_type::type
{
返回(a
要做到这一点,您必须包括标题
编译器,给出一个.clear diagnostic.BTW:已经有std::min()
可用,正确地执行此操作…@πάνταῥεῖ std::min需要相同类型的参数solution->std::common_type
或->decltype(a