【C++】”如虎添翼“:模板初階

泛型編程

C++中一種使用模板來實現代碼重用和類型安全的編程范式。它允許程序員編寫與數據類型無關的代碼,從而可以用相同的代碼邏輯處理不同的數據類型。模板是泛型編程的基礎

模板分為兩類:

  1. 函數模板:代表了一個函數家族,該函數模板與類型無關,在使用時被參數化,根據實參類型產生 函數的特定類型版本

  2. 類模板

函數模板:

代表了一個函數家族,該函數模板與類型無關,在使用時被參數化,根據實參類型產生 函數的特定類型版本

提供一個函數的模板,但是類型是不固定的,對于這種編程也叫泛型編程

Template<typename T1, typename T2,......,typename Tn>//模板格式template<typename T>//T是一個類型的名稱,沒有要求;typename是一個關鍵字,后面跟的是泛型類型的名字,typename也能換成class。typename T合起來就是一個模板參數
void Swap(T& left,T& right)
{T temp = left;left = right;right = temp;
}
template<typename T>
void Swap(T& left,T& right)
{T temp = left;left = right;right = temp;
}
int main()
{int x = 1, y = 2;double m = 1.1, n = 2.2;Swap(x,y);//這里兩處函數調用,看似調用的是一個函數,但實際上時調用了兩個函數(函數調用要建立棧幀,一個是int類型,一個double類型,類型大小都不一樣,更不可能調用的是同一個函數了),這個可以從匯編層來觀察Swap(m,n);return 0;
}

觀察匯編代碼發現,call的地址不一樣,說明調用的不是同一個函數。

原理:

編譯器通過你編寫的模板,再根據你傳入的參數,自行生成對應的函數,調用的就是這個編譯器自行生成的函數

如果你傳入兩個參數,這兩個參數的類型不一樣,就需要寫兩個模板參數,否則編譯會不通過

正確做法如下:

template<typename T1, typename T2>
void Swap(T1&left,T2&right)
{T1 temp = left;left = right;right = temp;
}
int main()
{int x = 1, y = 2;double m = 1.1, n = 2.2;Swap(x,n);Swap(m,y);return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80715.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80715.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80715.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

十五、多態與虛函數

十五、多態與虛函數 15.1 引言 面向對象編程的基本特征&#xff1a;數據抽象&#xff08;封裝&#xff09;、繼承、多態基于對象&#xff1a;我們創建類和對象&#xff0c;并向這些對象發送消息多態&#xff08;Polymorphism&#xff09;&#xff1a;指的是相同的接口、不同的…

點云特征提取的兩大經典范式:Voxel-based 與 Pillar-based

點云特征提取的兩大經典范式&#xff1a;Voxel-based 與 Pillar-based 在點云處理領域&#xff0c;尤其是針對 3D 目標檢測任務&#xff0c;特征提取是核心環節之一。目前&#xff0c;Voxel-based&#xff08;體素化&#xff09;和 Pillar-based&#xff08;柱狀化&#xff09…

前蘋果首席設計官回顧了其在蘋果的設計生涯、公司文化、標志性產品的背后故事

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

web 自動化之 selenium 元素四大操作三大切換等待

文章目錄 一、元素的四大操作二、三大切換&等待1、切換窗口:當定位的元素不在當前窗口&#xff0c;則需要切換窗口2、切換iframe&#xff1a;當定位的元素在frame/iframe&#xff0c;則需要切換3、切換彈出窗口 一、元素的四大操作 1、輸入 2、點擊 3、獲取文本 4、獲取屬…

window server 2012安裝sql server2008 r2

執行sql server2008 r2安裝目錄下的setup 選擇運行程序而不獲取幫助 然后就是讓人絕望的 只能先搞這個了&#xff0c;F*微軟&#xff0c;自家軟件不讓正常安裝 打開服務器管理器->添加角色和功能->選擇Web 服務&#xff08;IIS&#xff09;->添加.NET Framework3.5 然…

【K8S學習之生命周期鉤子】詳細了解 postStart 和 preStop 生命周期鉤子

0. 參考 Kubernetes容器生命周期 —— 鉤子函數詳解&#xff08;postStart、preStop&#xff09; - 人艱不拆_zmc - 博客園詳解Kubernetes Pod優雅退出 - 人艱不拆_zmc - 博客園 1. Kubernetes 生命周期鉤子概述 在 Kubernetes 中&#xff0c;生命周期鉤子&#xff08;Lifec…

測試文章標題01

模型上下文協議&#xff08;Model Context Protocol, MCP&#xff09;深度解析 一、MCP的核心概念 模型上下文協議&#xff08;Model Context Protocol, MCP&#xff09;是一種用于規范機器學習模型與外部環境交互的標準化框架。其核心目標是通過定義統一的接口和數據格式&am…

kubuntu系統詳解

Kubuntu 系統深度解析&#xff08;從系統架構到用戶體驗&#xff09; 一、定位與核心特性 Kubuntu 是 Ubuntu 的官方 KDE 衍生版&#xff0c;基于 Ubuntu 的穩定底層&#xff08;Debian 技術棧&#xff09;&#xff0c;搭載 KDE Plasma 桌面環境&#xff0c;主打 “功能豐富、…

cURL:通過URL傳輸數據的命令行工具庫介紹

文章目錄 1. 什么是 curl&#xff1f;2. 下載與安裝 curl3. curl 的常見用法3.1 獲取網頁內容3.2 下載文件3.3 發送 POST 請求&#xff08;帶表單數據&#xff09;3.4 發送帶 JSON 的 POST 請求 1. 什么是 curl&#xff1f; cURL&#xff08;CommandLine URL&#xff09;是非常…

從零搭建AI工作站:Gemma3大模型本地部署+WebUI配置全套方案

文章目錄 前言1. 安裝Ollama2.Gemma3模型安裝與運行3. 安裝Open WebUI圖形化界面3.1 Open WebUI安裝運行3.2 添加模型3.3 多模態測試 4. 安裝內網穿透工具5. 配置固定公網地址總結 前言 如今各家的AI大模型廝殺得如火如荼&#xff0c;每天都有新的突破。今天我要給大家安利一款…

Element Plus對話框(ElDialog)全面指南:打造靈活彈窗交互

&#x1f4cc; 開篇導語 對話框是Web應用中實現用戶交互的核心組件之一&#xff0c;常用于信息確認、表單提交或詳情展示。Element Plus的ElDialog組件以高擴展性和優雅動效著稱&#xff0c;支持高度定制化開發。本文將從基礎配置到進階技巧&#xff0c;手把手教你掌握對話框組…

解決WSL、Ubuntu的.ico圖標不正確顯示縮略圖

解決WSL、Ubuntu的.ico圖標不正確顯示縮略圖 問題描述 Win10系統中由于更新了某些軟件&#xff0c;篡改了默認的圖像顯示軟件&#xff0c;導致WSL等軟件未能成功顯示圖標&#xff0c;表現如下&#xff1a; 解決方法 將ico文件的默認打開方式更改為“畫圖”&#xff0c;如下…

[數據結構高階]并查集初識、手撕、可以解決哪類問題?

標題&#xff1a;[數據結構高階]并查集初識、手撕、可以解決哪類問題&#xff1f; 水墨不寫bug 文章目錄 一、認識并查集二、模擬實現并查集三、用并查集解決問題1、[省份的數量](https://leetcode.cn/problems/number-of-provinces/)2、[等式方程的可滿足性](https://leetcode…

如何快速入門大模型?

學習大模型的流程是什么 &#xff1f; 提示詞工程&#xff1a;只需掌握提問技巧即可使用大模型&#xff0c;通過優化提問方式獲得更精準的模型輸出套殼應用開發&#xff1a;在大模型生態上開發業務層產品&#xff08;如AI主播、AI小助手等&#xff09;&#xff0c;只需調用API…

《AI大模型應知應會100篇》第59篇:Flowise:無代碼搭建大模型應用

第59篇&#xff1a;Flowise&#xff1a;無代碼搭建大模型應用 摘要&#xff1a;本文將詳細探討 Flowise 無代碼平臺的核心特性、使用方法和最佳實踐&#xff0c;提供從安裝到部署的全流程指南&#xff0c;幫助開發者和非技術用戶快速構建復雜的大模型應用。文章結合實戰案例與配…

python打卡day23@浙大疏錦行

知識回顧: 1. 轉化器和估計器的概念 2. 管道工程 3. ColumnTransformer和Pipeline類 作業&#xff1a; 整理下全部邏輯的先后順序&#xff0c;看看能不能制作出適合所有機器學習的通用pipeline 一、導入數據庫 import pandas as pd import numpy as np import matplo…

Vue.js框架的優缺點

別再讓才華被埋沒&#xff0c;別再讓github 項目蒙塵&#xff01;github star 請點擊 GitHub 在線專業服務直通車GitHub賦能精靈 - 艾米莉&#xff0c;立即加入這場席卷全球開發者的星光革命&#xff01;若你有快速提升github Star github 加星數的需求&#xff0c;訪問taimili…

交易流水表的分庫分表設計

交易流水表的分庫分表設計需要結合業務特點、數據增長趨勢和查詢模式&#xff0c;以下是常見的分庫分表策略及實施建議&#xff1a; 一、分庫分表核心目標 解決性能瓶頸&#xff1a;應對高并發寫入和查詢壓力。數據均衡分布&#xff1a;避免單庫/單表數據傾斜。簡化運維&#…

操作系統學習筆記第3章 (竟成)

第 3 章 內存管理 【考綱內容】 1.內存管理基礎&#xff1a; 1.內存管理的基本概念&#xff1a;邏輯地址空間與物理地址空間&#xff1b;地址變換&#xff1b;內存共享&#xff1b;內存保護&#xff1b;內存分配與回收&#xff1b; 2.連續分配管理方式&#xff1b; 3.頁式管理&…

中科院無人機導航物流配送的智能變革!LogisticsVLN:基于無人機視覺語言導航的低空終端配送系統

作者&#xff1a;Xinyuan Zhang, Yonglin Tian, Fei Lin, Yue Liu, Jing Ma, Kornlia Sra Szatmry, Fei-Yue Wang 單位&#xff1a;中國科學院大學人工智能學院&#xff0c;中科院自動化研究所多模態人工智能系統國家重點實驗室&#xff0c;澳門科技大學創新工程學院工程科學系…