2 wddpfx wddpfx 于 2016.03.05 11:35 提问

关于函数模板重载与指针参数

模板一:
template string debug_rep(const T &t);
模板二:
template string debug_rep(T *p);
使用:
string s("hi");
const string *sp=&s;
方式一:debug_rep(&s);
方式二:debug_rep(sp);
方式一、二都会匹配模板二,但为什么说方式一对模板二是精确匹配,方式二对模板一、二都是精确匹配,由于特例化匹配模板二,&s与sp同为指针实参有什么区别?

1个回答

caozhy
caozhy   Ds   Rxr 2016.03.06 07:06
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
函数重载和函数模板的区别
函数重载 通常在C语言编程中,如果我们比较三个整数的大小,我们可以进行编写一个max()函数,而如果我们要继续比较三个浮点数的大小,就需要重新编写一个函数,函数体基本是完全相同的,就是返回值和参数类型是不同的,但是函数名称不能是一个了,所以要写第二个函数max1()。 在C++中就可以避免这个问题,允许用同一个函数名定义多个函数,但是一定要注意一点,重载函数的参数个数、参数类型、参数顺序、这三
函数指针模板参数
同样,函数指针型模板参数的意义在于:在变与不变之间取得最优实现。通常函数指针的作用是实现回调(callback),即由调用方将所需要操作包装成某个函数f0,并将指向此函数的指针&f0作为参数传递给函数f1。函数f1在运行时回调所指函数f0,从而实现调用方所期待操作。f0就是一个回调函数。将回调函数指针作为被调用函数的参数时,实现的是动态回调,只有在运行时才能确定是回调哪个函数。如果并不需要动态回调
重载函数模板
//求两个int值得最大值 inline int const& max(int const&  a,int const& b) {     return a } //求两个任意类型值中的最大者 template inline T const& max(T const& a,T const& b) {   return a } //求3个任意类型值中的最大者 temp
C++ 模板函数和非模板函数的重载
关于函数的重载机制,是一个比较复杂的问题,其中涉及到了优先级定义和最佳匹配等问题,如果要阐述清楚,恐怕不是一两篇文章就能说的明白。但是如果掌握了一些常用的“规律”,对于了解程序对重载函数是如何进行选择也有很大的好处,本文尝试将自己理解的知识,结合下面简单的例子简略的说说函数重载机制,文章的摘录部分列出了一些关于程序如何选择重载函数的规则。: ) 例子如下: #include
c++函数重载和函数模板
上学期学了C++,可是忘得差不多了 一、函数重载 1、函数重载挺简单的,按我的理解就是相同功能的函数可以用相同的名字,通俗点就是中文里的我能做什么,比如做饭,做菜,虽然做的东西不一样,但是他们都是有“做”这个动词~ 2、函数重载能干嘛~我觉得就是同一个函数能够处理不同的数据,不然当同种操作要处理int、float型数据时就要定义多个函数名,多个函数名会不利于程序员阅读和记忆,所以
函数模板和函数重载在一起(调用规则研究)_传智扫地僧
传智扫地僧课程学习笔记。 #include "iostream" using namespace std; /* 1,函数模板可以像普通函数一样被重载 2,C++编译器优先考虑普通函数 3,如果函数模板可以产生一个更好的匹配,那么选择模板 4,可以通过空模板的方式,限制只通过模板的匹配 */ int max( int a, int b) { cout<<"int max( in
函数的重载与函数模板
函数重载:有时候想要实现几个功能相近,但只是处理的参数类型不同的函数,在C语言里我们要把这些函数起上不同的名字,而在C++里我们可以把这些函数都给上一个函数名只需要把不同的参数给入函数就可以了,这样大大的减少了函数名的数量,增强了代码的可读性。C++中这叫做函数的重载,是在同一作用域内声明几个功能类似的同名函数,但是这些函数必须是参数类型和数量必须不同。调用时,编译器会自动匹配参数最相符的函数,这样
函数的模板2——函数模板重载
1、重载:函数名相同,但函数的定义不同。编译系统会根据实参的类型和个数选择匹配度最高的函数进行调用。 重载的过程规律(执行顺序如下): (1)首先会查找普通函数,寻找和使用函数名和参数类型最匹配的函数,如果找到则调用; (2)若普通函数没有,则在函数模板中查找,将模板实例化,若和调用的函数匹配,则调用该函数模板; (3)若经过上述两步还是未能找到,则可以通过类型转换转换进行参数匹配的函数重
CPP 6th——运算符重载+函数重载+函数模板
运算符重载的概念及语法 所谓重载,就是赋予新的含义。函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。运算符重载(Operator Overloading)也是一个道理,同一个运算符可以有不同的功能。 函数重载 C++允许多个函数拥有相同的名字,只要它们的参数列表不同就可以。这就是函数的重载(Function Overloading)
【c++模板笔记一】模板的介绍及其重载
本文你将学到: 1.为什么要引入模板。 2.怎么去定义和使用模板 3.分析模板的实现方法和隐式推断规则。 4.模板重载的规则。