原则:“模板参数推导机制无法推导函数的返回值类型”

版本一:

// 缺少<T>     参数 int n    对比第三个版本( 缺少<T>   参数 T n) !

编译错误提示:

错误 1 error C2783: “T FibRecursion(int)”: 无法为“T”推导 模板 参数 c:\users\yi\documents\visual studio 2005\projects\斐波纳契数列\斐波纳契数列\斐波纳契数列.cpp 16

 #include "stdafx.h"
#include <iostream> template<class T>
T FibRecursion(int n) // 参数 int n
{
if (n<)
return -; if (n == || n == )
return ; return FibRecursion(n-) + FibRecursion(n-); // 缺少<T>
}
int _tmain(int argc, _TCHAR* argv[])
{
int result = FibRecursion<int>(); //错误行
system("pause");
return ;
}

版本二:

// 加上<T>   参数 int n 或者 T n

编译通过!

 #include "stdafx.h"
#include <iostream> template<class T>
T FibRecursion(int n) // 参数 int n
{
if (n<)
return -; if (n == || n == )
return ; return FibRecursion<T>(n-) + FibRecursion<T>(n-); // 加上<T>
}
int _tmain(int argc, _TCHAR* argv[])
{
int result = FibRecursion<int>(); //没有报错
system("pause");
return ;
}
 #include "stdafx.h"
#include <iostream> template<class T>
T FibRecursion(T n) // 参数 T n
{
if (n<)
return -; if (n == || n == )
return ; return FibRecursion<T>(n-) + FibRecursion<T>(n-); // 加上<T>
}
int _tmain(int argc, _TCHAR* argv[])
{
int result = FibRecursion<int>(); //没有报错
system("pause");
return ;
}

版本三:

// 缺少<T>   参数 T n

编译通过!

 #include "stdafx.h"
#include <iostream> template<class T>
T FibRecursion(T n) // 参数 T n
{
if (n<)
return -; if (n == || n == )
return ; return FibRecursion(n-) + FibRecursion(n-); // 缺少<T>
}
int _tmain(int argc, _TCHAR* argv[])
{
int result = FibRecursion<int>(); //没有报错
system("pause");
return ;
}

http://bbs.sjtu.edu.cn/bbstcon,board,C,reid,1293357257.html 没看懂,囧!

error C2783: 无法为“T”推导 模板 参数的更多相关文章

  1. c++特性:指向类成员的指针和非类型类模板参数和函数指针返回值 参数推导机制和关联型别

    一.c++允许定义指向类成员的指针,包括类函数成员指针和类数据成员指针 格式如下: class A { public: void func(){printf("This is a funct ...

  2. C++11 图说VS2013下的引用叠加规则和模板参数类型推导规则

    背景:    最近在学习C++STL,出于偶然,在C++Reference上看到了vector下的emplace_back函数,不想由此引发了一系列的“探索”,于是就有了现在这篇博文. 前言:     ...

  3. C++17尝鲜:类模板中的模板参数自动推导

    模板参数自动推导 在C++17之前,类模板构造器的模板参数是不能像函数模板的模板参数那样被自动推导的,比如我们无法写 std::pair a{1, "a"s}; // C++17 ...

  4. c++11-17 模板核心知识(五)—— 理解模板参数推导规则

    Case 1 : ParamType是一个指针或者引用,但不是universal reference T& const T& T* Case 2 : ParamType是Univers ...

  5. 零值初始化&字符串常数作为函数模板参数

    1.在定义一个局部变量时,并希望该局部变量的初始化一个值,可以显示调用其默认构造函数,使其值为0(bool类型默认值为false). template <typename T> void ...

  6. 从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename

    一.缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: temp ...

  7. 缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename

    一.缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: temp ...

  8. C++非类型模板参数

    对于函数模板与类模板,模板参数并不局限于类型,普通值也可以作为模板参数.在基于类型参数的模板中,你定义了一些具体的细节来加以确定代码,直到代码被调用时这些细节才被真正的确定.但是在这里,我们面对的是这 ...

  9. C++ Template之非类型模板参数

    非类型模板参数是通过基本变量类型引入,例如int,在使用时必须显式自定值,不能通过推断. 非类型模板参数的限制:不能是浮点数(在vc6.0上测试可以为浮点型),对象以及指向内部链接对象的指针. #in ...

随机推荐

  1. 训练集(train set) 验证集(validation set) 测试集(test set)

    转自:http://www.cnblogs.com/xfzhang/archive/2013/05/24/3096412.html 在有监督(supervise)的机器学习中,数据集常被分成2~3个, ...

  2. JAVA基础知识之JVM-——类初始化

    我们通常说的类初始化,其实要分为三个阶段,类加载,连接,和初始化.他们大致完成以下功能.类加载将class文件载入内存,类连接进行内存分配,初始化进行变量赋值. 类的加载,连接和初始化 java.la ...

  3. 2016年11月6日 星期日 --出埃及记 Exodus 19:22

    2016年11月6日 星期日 --出埃及记 Exodus 19:22 Even the priests, who approach the LORD, must consecrate themselv ...

  4. ContentProvider官方教程(7)3种访问形式:批处理、异步访问、intent间接访问(临时URI权限)

    Alternative Forms of Provider Access Three alternative forms of provider access are important in app ...

  5. ContentProvider官方教程(6)provider支持的数据类型

    Provider Data Types Content providers can offer many different data types. The User Dictionary Provi ...

  6. fragment (1)简单示例:定义,界面配置,fragment之间的跳转

    fragment作用 同一程序中切换界面 比activity轻快,灵活. fragment代码示例 ide  : android studio 1.2 sdk : 22 package com.exa ...

  7. word2007如何进行批注

    在正常的办公或者学校撰写论文,请别人进行提出修改意见是不可避免的,在word2007中提供了批注修改模式,十分方便,给撰写文档和批阅文档的人带来了极大的方便.本节介绍如何在word2007中进行批注及 ...

  8. oracle 主键自增

    将表t_uaer的字段ID设置为自增:(用序列sequence的方法来实现) ----创建表 Create table t_user( Id number(6), userid varchar2(20 ...

  9. CentOS 7.0安装配置LAMP服务器(Apache+PHP+MariaDB)

    CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止fir ...

  10. 利用JDBC处理mysql大数据--大文本和二进制文件等

    转载自http://www.cnblogs.com/xdp-gacl/p/3982581.html 一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob, ...