【问题标题】:using template ( same result) [closed]使用模板(相同的结果)[关闭]
【发布时间】:2017-02-28 20:36:09
【问题描述】:

为什么这两个程序的输出是一样的?

示例 1

template < typename T1, typename T2 >
T1 sumit(T1 a, T2 b)
{
    T2 result = (a + b);
    return result;
}
int main()
{
    cout << sumit(1, 'a');
}

示例 2

template < typename T1, typename T2 >
T1 sumit(T1 a, T2 b)
{
    T1 result = (a + b);
    return result;
}

int main()
{
    cout << sumit(1, 'a');
}

T1结果和T2结果有什么区别?

【问题讨论】:

  • 请花时间清理您的示例。呈现凌乱或格式奇怪的代码(包括过多的空白或缩进)会使许多用户望而却步。

标签: c++ templates


【解决方案1】:

在任何一种情况下,您都将第一个参数作为 int 传递,第二个作为 char 传递。因此,T1 变为 int,T2 变为 char

在第一种情况下,您将a+b 的结果存储在一个 char 变量中(因为这里的 T2 是一个 char),但是在返回结果时它变成了一个 int。在您的代码中,您只需添加 1'a' 并且 'a' 的 ASCII 值是 97。所以返回的结果是 98。charint 在此处返回相同的答案,因为 char 也可以存储 98(char 为 1 字节,范围为 -128 到 127;int 为 4 字节)。

在您的第二个程序中,您将总和存储在一个 int 变量中(因为 T1 是 int),它绝对可以存储 1+'a' 的总和,即 98(int 值)。

所以你在这两种情况下都得到了相同的结果。

如果您添加了一些较大的int 值而不是1,则两个程序返回的结果会有所不同。例如,如果您将1200 and 'a' 传递给 sumit() 函数,那么第一个程序将由于char 范围溢出而返回17,但第二个程序将返回1297(在 int 的情况下不会溢出)。

【讨论】:

    【解决方案2】:

    在第一种情况下,您正在创建一个 T2 项目,然后将其作为 T1 项目返回(根据函数签名)。在第二个程序中,您将创建一个 T1 项目并将其作为 T1 项目返回。在这两种情况下,返回的是 T1,而不是 T2。

    【讨论】:

    • @utsav_deep 我从来没有说过它们是等价的,只是两者都返回 T1 值,在这个例子中是一个 int。
    • 意识到这一点后删除了我的评论。
    猜你喜欢
    • 2012-08-10
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2014-03-24
    • 2019-04-19
    • 2023-03-31
    • 2019-04-03
    相关资源
    最近更新 更多