1. 程式人生 > >當函數模版遇上函數重載

當函數模版遇上函數重載

vao array 高速 個數 div rgb hello margin 能夠

demo 1

#include <iostream>
using namespace std;

//讓 類型參數化 ===, 方便程序猿進行編碼
// 泛型編程 
//template 告訴C++編譯器 我要開始泛型編程了 .看到T, 不要隨便報錯
template <typename T>
void myswap(T &a, T &b)
{
	T c = 0;
	c = a;
	a = b;
	b = c;
	cout << "hello ....我是模板函數 歡迎 calll 我" << endl;
}

void myswap(int a, char c)
{
	cout << "a:" << a << "c:" << c << endl;
	cout << "我是普通函數 歡迎來訪" << endl;
}


void main()
{
	int		a = 10;
	char	c = 'z';

	myswap(a, c); // 普通函數的調用:  能夠進行隱式的類型轉換 
	myswap(c, a); // 調用函數模版

	myswap(a, a); // 函數模板函數的調用(本質:類型參數化): 將嚴格的依照類型進行匹配,不會進行自己主動類型轉換

	
	cout<<"hello..."<<endl;
	system("pause");
	return ;
}
通過demo 1能夠得到:

函數模板和普通函數差別結論:

1、函數模板不同意自己主動類型轉化;

2、普通函數可以進行自己主動類型轉換。


demo 2

/*
函數模板不同意自己主動類型轉化
普通函數能夠進行自己主動類型轉換
*/


#include "iostream"
using namespace std;


int Max(int a, int b)
{
	cout<<"int Max(int a, int b)"<<endl;
	return a > b ?

a : b; } template<typename T> T Max(T a, T b) { cout<<"T Max(T a, T b)"<<endl; return a > b ? a : b; } template<typename T> T Max(T a, T b, T c) { cout<<"T Max(T a, T b, T c)"<<endl; return Max(Max(a, b), c); } void main() { int a = 1; int b = 2; cout<<Max(a, b)<<endl; //當函數模板和普通函數都符合調用時,優先選擇普通函數 cout<<Max<>(a, b)<<endl; //若顯示使用函數模板,則使用<> 類型列表 cout<<Max(3.0, 4.0)<<endl; //假設 函數模板產生更好的匹配 使用函數模板 cout<<Max(5.0, 6.0, 7.0)<<endl; //重載 cout<<Max('a', 100)<<endl; //調用普通函數 能夠隱式類型轉換 system("pause"); return ; }

通過demo 2的分析能夠得到:

函數模版和普通函數在一起的調用規則:

1、函數模版能夠像普通函數一樣被重載。

2、C++編譯器優先考慮普通函數;

3、假設函數模版能夠產生一個更好的匹配。那麽選擇模版;

4、能夠通過空模版實參列表的語法限定編譯器僅僅通過模版匹配。

記住這4點。就能避免非常多錯誤了



閱讀全文
0
0
查看評論 * 以上用戶言論僅僅代表其個人觀點,不代表CSDN站點的觀點或立場

C++ 模板函數和非模板函數的重載

關於函數的重載機制。是一個比較復雜的問題,當中涉及到了優先級定義和最佳匹配等問題,假設要闡述清楚,恐怕不是一兩篇文章就能說的明確。

可是假設掌握了一些經常使用的“規律”。對於了解程序對重載函數是怎樣進行選擇...

  • 技術分享圖片
  • colddie
  • 2013-03-12 16:29
  • 2396

從零開始學C++之模板(一):函數模板、函數模板特化、重載函數模板、非模板函數重載

一、引子 考慮求兩數較大值函數max(a,b) 對於a,b的不同類型,都有同樣的處理形式: return a 用已有方法解決: (1)宏替換 #define max(a,b) ((a) 存...
  • 技術分享圖片
  • Simba888888
  • 2013-07-20 20:09
  • 3495

C++ 虛函數和函數重載

函數重載 怎樣講函數重載: What——函數重載是什麽? why——為什麽要用函數重載,沒有函數重載會如何? how——舉例說明怎麽使用函數重載 *****************...
  • 技術分享圖片
  • jscese
  • 2014-07-23 19:34
  • 1220

關於模版重載函數函數命名沖突的解決方式

函數模版重載命名沖突的解決方式 我們編寫函數模版的時候肯定或多或少會遇到這些問題錯誤 error C2668: “min”: 對重載函數的調用不明白 ,細致找了半天怎麽也找不出錯誤。換了非常...
  • 技術分享圖片
  • xiaoyyu_ai_c
  • 2017-11-28 14:42
  • 27

C++函數重載

  • 2013-09-19 20:17
  • 3KB
  • 下載
技術分享圖片

函數重載和立方值

  • 2014-09-12 11:00
  • 3KB
  • 下載
技術分享圖片

PHPCMS模版解析之TEMPLATE函數

昨天跟到了phpcms系統初始化到控制器流程 今天阿唐屌絲帶大家一起分析phpcms模版機制 控制器 在進行一些 邏輯操作後 就開始渲染 視圖顯示 用到 template函數 所以要搞清phpcm...
  • 技術分享圖片
  • jsbba
  • 2014-05-02 00:26
  • 2477

函數重載和覆蓋的差別.doc

  • 2012-04-12 21:39
  • 27KB
  • 下載
技術分享圖片

重載、覆蓋、多態與函數隱藏

  • 2014-01-24 10:25
  • 60KB
  • 下載
技術分享圖片

template學習之零值初始化及字符串常量作(function template argument)函數模版參數問題

本篇僅僅是摘抄自《c++ template》小問題比較少註意,並且也easy忘記 1 零值初始化 對於主要的數據類型int,double,pointer type來說,一般沒有default構造式對其初始化...
  • 技術分享圖片
  • qingtianweichong
  • 2013-07-26 20:59
  • 784
技術分享圖片 技術分享圖片
    個人資料
    技術分享圖片
    zyq522376829 技術分享圖片 技術分享圖片
    • 訪問:389772次
    • 積分:7872
    • 等級: 技術分享圖片 積分:7872
    • 排名:第3041名
    • 原創:400篇
    • 轉載:30篇
    • 譯文:11篇
    • 評論:87條
    個人網址

    我的新博客

    個人簡單介紹

    my Github

    my UVa Hunting

    Github of my UVa AC code

    id=100009705912476" target="_blank">Facebook

    Sina Weibo

    文章搜索
    博客專欄
    技術分享圖片 iOS Developer Library

    文章:12篇

    閱讀:20751
    文章分類
  • iOS(42)
  • 機器學習(8)
  • AVFoundation Programming Guide(8)
  • cocos2dx(8)
  • C語言(8)
  • C++(91)
  • 網絡(16)
  • linux(64)
  • Unix環境高級編程(9)
  • UVa-OnlineJudge(126)
  • 算法(38)
  • 操作系統(7)
  • 編程工具(4)
  • Python(19)
  • 隨筆(4)
  • 刷題糾錯(2)
  • STL源代碼剖析(1)
  • Effecfive C++(3)
  • LaTex(3)
  • MATLAB(2)
    閱讀排行
  • 海量數據處理 - 10億個數中找出最大的10000個數(top K問題)(15773)
  • NSDictionary字典創建,獲取,遍歷,可變字典的刪除 - iOS(12516)
  • Python代碼執行助手(7848)
  • ReplayKit庫,iOS原生直播神器(7350)
  • 在 Linux 下用 mkdir 命令來創建文件夾和子文件夾(5865)
  • Latex 表格內文字過長自己主動換行(4844)
  • Linux完整備份工具 - dump, restore(如今基本不用這兩個)(4161)
  • NSArray/NSMutableArray創建,獲取,遍歷,排序 - iOS(4006)
  • 在定點二進制運算器中。減法運算一般通過什麽來實現(3831)
  • 美國康奈爾大學BioNB441元胞自己主動機MATLAB應用(3712)
    評論排行
  • AVFoundation Programming Guide(官方文檔翻譯4)Editing - 編輯(9)
  • AVFoundation Programming Guide(官方文檔翻譯5)Still and Video Media Capture - 靜態視頻媒體捕獲。(6)
  • 海量數據處理 - 10億個數中找出最大的10000個數(top K問題)(6)
  • AVFoundation Programming Guide(官方文檔翻譯)完整版中英對比(5)
  • 【歡迎請進】本人簡單介紹(5)
  • AVFoundation Programming Guide(官方文檔翻譯7)Time and Media Representations 時間和媒體表示(4)
  • AVFoundation Programming Guide(官方文檔翻譯1)About AVFoundation - AVFoundation概述(4)
  • AVFoundation Programming Guide(官方文檔翻譯2)Using Assets - 使用Assets(4)
  • 機器學習入門系列02,Regression 回歸:案例研究(4)
  • cocos2dx在xcode8 GM版下的錯誤`libpng error:CgBI:unhandled critical chunk`(3)
    文章存檔
  • 2017年12月(1)
  • 2017年09月(2)
  • 2017年06月(1)
  • 2017年04月(2)
  • 2017年03月(4)
  • 2016年12月(1)
  • 2016年11月(1)
  • 2016年09月(6)
  • 2016年08月(32)
  • 2016年03月(2)
  • 2016年01月(3)
  • 2015年12月(3)
  • 2015年09月(18)
  • 2015年08月(79)
  • 2015年07月(92)
  • 2015年06月(194)
收藏助手

當函數模版遇上函數重載