我做了一个模板和一个auto比较 2 个值并返回最小的值的函数。
这是我的代码:
#include <iostream>
using namespace std;
// Template with a value returning function: PrintSmaller
template <typename T, typename U>
auto PrintSmaller(T NumOne, U NumTwo) {
if (NumOne > NumTwo) {
return NumTwo;
}
else {
return NumOne;
}
}
int main() {
int iA = 345;
float fB = 23.4243;
cout << PrintSmaller(iA, fB) << endl;
cout << PrintSmaller(fB, iA) << endl;
return 0;
}
但它无法编译,我在 VS 2015 上收到此错误:错误 C3487“int”:所有返回表达式必须推导为相同类型:以前是“float”
但是,如果我删除if声明并编写函数打印较小像这样它工作没有问题:
auto PrintSmaller(T NumOne, U NumTwo) {
return (NumOne < NumTwo ? NumOne : NumTwo);
}
有什么不同 ?为什么第一个代码无法编译?
谢谢。
一个函数只能有一个return
类型。使用return
类型推导是指根据表达式中表达式的类型进行推导first return
解析器看到的语句。如果以后return
语句不返回相同类型的表达式,则该函数被认为是自相矛盾的,因此是错误的。
在第二种情况下,?:
基于根据第二和第三子表达式确定的公共类型来确定表达式的类型。两个子表达式将被转换为该公共类型。
这与如何做不同return
类型推导有效。如果您打算让第一个案例发挥作用,那么您需要明确地将返回值转换为所需的返回类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)