我制作了一个模板和一个自动函数,比较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;
}
Run Code Online (Sandbox Code Playgroud)
但它不会编译,我在VS 2015上得到这个错误: 错误C3487'int':所有返回表达式必须推导为相同的类型:以前它是'浮动'
但是,如果我删除if语句并像这样编写PrintSmaller函数它没有问题:
auto PrintSmaller(T NumOne, U NumTwo) {
return (NumOne < NumTwo ? NumOne : NumTwo);
}
Run Code Online (Sandbox Code Playgroud)
有什么不同 ?为什么第一个代码不会编译?谢谢.
一个函数只能有一个return类型.使用return类型推导意味着它将根据解析器看到的第一个 return语句中的表达式类型推断出来.如果后面的return语句不返回相同类型的表达式,则该函数被认为是自相矛盾的,因此是不正确的.
在第二种情况下,?:基于基于第二和第三子表达式确定的共同类型来确定表达式的类型.这两个子表达式将转换为此常见类型.
这与return类型推导的工作方式不同.如果您希望第一种情况起作用,则需要将返回值显式转换为所需的返回类型.
| 归档时间: |
|
| 查看次数: |
347 次 |
| 最近记录: |