gpt4 book ai didi

c++ - 带有 if 语句的 auto 函数不会返回值

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:07 26 4
gpt4 key购买 nike

我制作了一个模板和一个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 语句并像这样编写函数 PrintSmaller问题:

auto PrintSmaller(T NumOne, U NumTwo) {
return (NumOne < NumTwo ? NumOne : NumTwo);
}

有什么区别?为什么第一个代码无法编译?谢谢。

最佳答案

一个函数只能有一个返回类型。使用 return 类型推导意味着它将根据解析器看到的 first return 语句中的表达式类型推导。如果后面的 return 语句不返回相同类型的表达式,则该函数被认为是自相矛盾的,因此格式错误。

在第二种情况下,?: 根据第二个和第三个子表达式确定的公共(public)类型确定表达式的类型。这两个子表达式将被转换为这种公共(public)类型。

这与 return 类型推导的工作方式不同。如果您想让您的第一个案例起作用,那么您需要显式将返回值转换为所需的返回类型。

关于c++ - 带有 if 语句的 auto 函数不会返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41536407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com