具有if语句的自动函数不会返回值

迈克·H

我制作了一个模板和一个自动函数,用于比较两个值并返回最小的值。这是我的代码:

#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);
}

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

尼科尔·波拉斯(Nicol Bolas)

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

在第二种情况下,?:根据基于第二和第三子表达式确定的公共类型来确定表达式的类型。这两个子表达式将被转换为此通用类型。

这与return类型推导的工作方式不同。如果您打算使用第一种情况,则需要将返回值显式转换为所需的返回类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有返回值的go函数

具有函数原型的返回值

如何在python的if语句中调用具有返回值的函数

具有Jquery函数的普通函数内部的返回值

从具有模板返回值的函数中删除类型

不接受具有不同返回值的函数重载

模拟python函数具有多个返回值

具有返回值的同步调用函数

这是在函数中实现 return 语句的正确方法吗?我的函数不会返回值

javascript 函数,不会返回值?

SQL函数卡住,不会返回值

当方法包含多个if语句且具有多个返回值时,如何从该方法获取返回值?

具有返回值的SQL返回

具有相同参数的函数不会返回相同的值

调用具有多个具有返回值的函数的委托

具有多个返回值的方法的“ if”初始化语句

GMock具有`Return`的`WillOnce`不会因错误的返回值而失败

使用switch语句从函数返回值以调用函数

返回具有C ++字符串返回值的函数的本地C字符串

具有不同函数的函数指针数组的返回值(以C表示)

为什么没有return语句的main函数返回值12?

用带有参数的函数的返回值编写if语句的正确方法是什么?

从具有多个返回值的函数调用中仅获取特定值?

如何区分具有多个返回值的函数的赋值和声明值?

列表理解需要来自函数输入的单独列表的值,具有多个返回值

函数不会在所有代码路径上返回值

嵌套私有函数的返回值

Firebase 函数没有返回值

为什么不能将具有返回值的函数分配给具有 void 的指针函数?