當函數模版遇上函數重載
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 ; }
函數模板和普通函數差別結論:
1、函數模板不同意自己主動類型轉化;
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 ; }
函數模版和普通函數在一起的調用規則:
1、函數模版能夠像普通函數一樣被重載。
2、C++編譯器優先考慮普通函數;
3、假設函數模版能夠產生一個更好的匹配。那麽選擇模版;
4、能夠通過空模版實參列表的語法限定編譯器僅僅通過模版匹配。
記住這4點。就能避免非常多錯誤了
- 頂
- 0
- 踩
- 0
- 上一篇為什麽會有函數模版
- 下一篇C++編譯器函數模版機制剖析 - 函數模版的本質
-
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
- 個人資料
- 訪問:389772次
- 積分:7872
- 等級: 積分:7872
- 排名:第3041名
- 原創:400篇
- 轉載:30篇
- 譯文:11篇
- 評論:87條
zyq522376829
- 個人網址
我的新博客
個人簡單介紹
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)