18328544355 发表于 2015-11-18 23:50:52

求解c++函数模板问题

画圈的地方我不知道它为啥会报错,能帮忙看看它为啥会错吗?求给解释解释!!!

0x01810 发表于 2015-11-19 09:46:55

template<typename T1, typename T2> auto f(T1 a, T2 b) -> decltype(a+b)
{
        return a+b;
}

C++14里可以这样写:
template<typename T1, typename T2> auto f(T1 a, T2 b)
{
        return a+b;
}

都城 发表于 2015-11-19 14:23:53

为何函数模板使用了返回值类型推导没出错,同时模板具体化时也使用返回值类型推导就出错了!!

都城 发表于 2015-11-19 14:24:55

我知道可以你那样写,但是就是不知道为啥我那样写会出错。

0x01810 发表于 2015-11-19 15:19:08

都城 发表于 2015-11-19 14:23
为何函数模板使用了返回值类型推导没出错,同时模板具体化时也使用返回值类型推导就出错了!! ...

函数模板不管代码对错编译器是不检查的. 只有具体化的时候才检查

都城 发表于 2015-11-20 01:04:46

0x01810 发表于 2015-11-19 15:19
函数模板不管代码对错编译器是不检查的. 只有具体化的时候才检查

函数模板和模板具体化同时使用返回值类型推导报错,不同时就报错,怎么回事呢?

都城 发表于 2015-11-20 01:05:15

不同时不报错

都城 发表于 2015-11-20 01:05:31

刚上面打错了

0x01810 发表于 2015-11-20 16:16:21

本帖最后由 0x01810 于 2015-11-20 16:18 编辑

模板具体化本来就是针对模板的. 函数模板就是模板.

你这样写:


template<> auto f(int a, double b) -> decltype(a+b)
{
        return a+b;
}

int main()
{
        cout<<(f(12, 20.12))<<endl;

        return 0;
}



error: no function template matches function template specialization 'f'.

是想表达什么?这种写法有问题吧. 函数模板只不过多了个显式推导参数类型.
页: [1]
查看完整版本: 求解c++函数模板问题