20、typedef和typename

在C++中,typedeftypename有不同的用途和語法。以下是它們的主要區別:

typedef

typedef用于為現有類型定義一個新的名字。它通常用于簡化復雜類型聲明,使代碼更易讀。

示例:
typedef unsigned long ulong;
typedef int (*func_ptr)(int, int);

在這個例子中:

  • ulongunsigned long 的別名。
  • func_ptr 是一個指向接受兩個 int 參數并返回 int 的函數的指針類型的別名。

typename

typename 主要用于模板編程中,表示一個依賴于模板參數的類型。它告訴編譯器,后面的標識符是一個類型,而不是一個變量或其他實體。

示例:
template <typename T>
class MyClass {typename T::value_type value;
};

在這個例子中:

  • typename T::value_type 告訴編譯器 value_type 是類型 T 的一個成員類型。

詳細區別

  1. 用途不同

    • typedef 用于定義類型別名。
    • typename 用于模板中,表示依賴于模板參數的類型。
  2. 使用場景不同

    • typedef 可以在任何地方使用來簡化類型聲明。
    • typename 主要在模板中使用,特別是在需要明確指定依賴于模板參數的類型時。
  3. 語法不同

    • typedef 語法:typedef existing_type new_type_name;
    • typename 語法:typename dependent_type::nested_type

示例代碼

以下是一個包含 typedeftypename 的完整示例:

#include <iostream>
#include <vector>// 使用 typedef 定義類型別名
typedef unsigned long ulong;
typedef std::vector<int> IntVector;template <typename T>
class MyClass {
public:// 使用 typename 指定依賴于模板參數的類型typename T::value_type value;void print() {std::cout << value << std::endl;}
};int main() {// 使用 typedef 定義的別名ulong a = 100;IntVector vec = {1, 2, 3, 4, 5};std::cout << "ulong a: " << a << std::endl;std::cout << "IntVector vec: ";for (int i : vec) {std::cout << i << " ";}std::cout << std::endl;// 使用 typename 的模板類MyClass<std::vector<int>> obj;obj.value = 42;obj.print();return 0;
}

總結

  • typedef 用于定義類型別名,簡化類型聲明。
  • typename 用于模板編程中,表示依賴于模板參數的類型。

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

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

相關文章

僵尸進程是什么?怎么回收?孤兒進程?

僵尸進程是什么&#xff1f; 僵尸進程的定義&#xff1a;對于多進程程序&#xff0c;當子進程結束運行但父進程還未讀取其退出狀態時&#xff0c;子進程就處于僵尸態。此時&#xff0c;內核不會立即釋放該子進程的進程表表項&#xff0c;以滿足父進程后續查詢子進程退出信息的…

[AI繪畫]sd學習記錄(二)文生圖參數進階

目錄 7.高分辨率修復&#xff1a;以小博大8.細化器&#xff08;Refiner&#xff09;&#xff1a;兩模型接力9.隨機數種子&#xff08;Seed&#xff09;&#xff1a;復現圖片吧 本文接續https://blog.csdn.net/qq_23220445/article/details/148460878?spm1001.2014.3001.5501…

C++學習思路

C++知識體系詳細大綱 一、基礎語法 (一)數據類型 基本數據類型 整數類型(int, short, long, long long)浮點類型(float, double, long double)字符類型(char, wchar_t, char16_t, char32_t)布爾類型(bool)復合數據類型 數組結構體(struct)聯合體(union)枚舉類型…

34、協程

在Linux系統中&#xff0c;協程是一種輕量級的線程&#xff0c;它們允許在多個任務之間切換&#xff0c;而不需要操作系統的線程調度。協程可以分為有棧協程和無棧協程&#xff0c;以及對稱協程和非對稱協程。 有棧協程 有棧協程每個協程都有自己的棧空間&#xff0c;允許協程…

DeepSeek 賦能金融科技,重塑開放銀行生態新圖景

目錄 一、金融科技開放銀行生態建設的現狀與挑戰二、DeepSeek 技術解析2.1 DeepSeek 的技術原理與特點2.2 與其他相關技術的對比優勢 三、DeepSeek 在開放銀行生態建設中的具體應用場景3.1 智能客服與財富管理3.2 風控與合規管理3.3 生態協同與數據共享 四、DeepSeek 應用案例分…

【QT控件】輸入類控件詳解

目錄 一、QLineEdit 二、Text Edit 三、Combo Box 四、Spin Box 五、Date Edit & Time Edit 六、Dial 七、Slider QT專欄&#xff1a;QT_uyeonashi的博客-CSDN博客 一、QLineEdit QLineEdit 用來表示單行輸入框. 可以輸入一段文本, 但是不能換行 核心屬性 核心信號…

【Oracle】存儲過程

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;Oracle 文章目錄 1. 存儲過程基礎概述1.1 存儲過程的概念與特點1.2 存儲過程的組成結構1.3 存儲過程的優勢 2. 基礎存儲過程2.1 簡單存儲過程2.1.1 創建第一個存儲過程2.1.2 帶變量的存儲過程 2.2 帶參數的存儲過程2.2.1 輸入參…

【MATLAB代碼】制導方法介紹與例程——三點法|三維空間,動態目標導引(訂閱專欄后可直接查看源代碼)

三點法導引是一種導彈制導策略,通過計算導彈、目標和制導站之間的相對位置來確保導彈準確追蹤移動目標。該方法利用三角定位和動態調整,實時更新導彈的飛行路徑,以提高命中率,廣泛應用于軍事導彈和無人機等領域。文中有完整的matlab源代碼,訂閱專欄后即可查看 文章目錄 代…

Servlet 快速入門

文章目錄 概念SpringBoot 測試案例執行原理傳統 Servlet在 SpringBoot &#xff08;嵌入式 Tomcat Spring MVC&#xff09; 中請求從瀏覽器到業務代碼的完整步驟關鍵點流程圖 參考 概念 運行在服務器端的小程序&#xff0c; Servlet 就是一個接口&#xff0c;定義 Java 類被瀏…

Java 8 Stream API 入門到實踐詳解

一、告別 for 循環&#xff01; 傳統痛點&#xff1a; Java 8 之前&#xff0c;集合操作離不開冗長的 for 循環和匿名類。例如&#xff0c;過濾列表中的偶數&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…

黃柏基因組-小檗堿生物合成的趨同進化-文獻精讀142

Convergent evolution of berberine biosynthesis 小檗堿生物合成的趨同進化 摘要 小檗堿是一種有效的抗菌和抗糖尿病生物堿&#xff0c;主要從不同植物譜系中提取&#xff0c;特別是從小檗屬&#xff08;毛茛目&#xff0c;早期分支的真雙子葉植物&#xff09;和黃柏屬&…

機器學習14-遷移學習

遷移學習學習筆記 一、遷移學習概述 遷移學習是機器學習中的一個重要領域&#xff0c;它旨在解決當目標任務的訓練數據有限時&#xff0c;如何利用與目標任務相關但不完全相同的源任務數據來提高學習性能的問題。在現實世界中&#xff0c;獲取大量高質量的標注數據往往成本高…

013旅游網站設計技術詳解:打造一站式旅游服務平臺

旅游網站設計技術詳解&#xff1a;打造一站式旅游服務平臺 在互聯網與旅游業深度融合的時代&#xff0c;旅游網站成為人們規劃行程、預訂服務的重要工具。一個功能完備的旅游網站&#xff0c;通過用戶管理、訂單管理等核心模塊&#xff0c;實現用戶與管理員的高效交互。本文將…

量子計算+AI:特征選擇與神經網絡優化創新應用

在由玻色量子協辦的第二屆APMCM“五岳杯”量子計算挑戰賽中&#xff0c;來自北京理工大學的Q-Masterminds團隊摘取了銀獎。該團隊由北京理工大學張玉利教授指導&#xff0c;依托玻色量子550計算量子比特的相干光量子計算機&#xff0c;將量子計算技術集成到特征選擇和神經網絡剪…

Maven相關問題:jna版本與ES沖突 + aop失效

文章目錄 1、背景2、解決3、一點思考4、環境升級導致AOP失效5、okhttp Bean找不到6、總結 記錄一些Maven依賴相關的思考 1、背景 做一個監控指標收集&#xff0c;用一下jna依賴&#xff1a; <dependency><groupId>net.java.dev.jna</groupId><artifact…

gitlab CI/CD本地部署配置

背景: 代碼管理平臺切換為公司本地服務器的gitlab server。為了保證commit的代碼至少編譯ok&#xff0c;也為了以后能拓展test cases&#xff0c;現在先搭建本地gitlab server的CI/CD基本的編譯job pipeline。 配置步驟&#xff1a; 先安裝gitlab-runner: curl -L "ht…

移除元素-JavaScript【算法學習day.04】

題目鏈接&#xff1a;27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 第一種思路 標簽&#xff1a;拷貝覆蓋 主要思路是遍歷數組 nums&#xff0c;每次取出的數字變量為 num&#xff0c;同時設置一個下標 ans 在遍歷過程中如果出現數字與需要移除的值不相同時&#xff…

leetcode sql50題

在中文站沒找到對應的集合&#xff0c;想來自己動手拷貝過來&#xff0c;方便大家面試復習用&#xff0c;對應英文站點&#xff1a; https://leetcode.com/studyplan/top-sql-50/ Select #1757. 可回收且低脂的產品 鏈接: https://leetcode.cn/problems/recyclable-and-low-fa…

Dynadot專業版郵箱工具指南(五):將域名郵箱添加至Outlook客戶端

關于Dynadot Dynadot是通過ICANN認證的域名注冊商&#xff0c;自2002年成立以來&#xff0c;服務于全球108個國家和地區的客戶&#xff0c;為數以萬計的客戶提供簡潔&#xff0c;優惠&#xff0c;安全的域名注冊以及管理服務。 Dynadot平臺操作教程索引&#xff08;包括域名郵…

【RTSP從零實踐】1、根據RTSP協議實現一個RTSP服務

&#x1f601;博客主頁&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客內容&#x1f911;&#xff1a;&#x1f36d;嵌入式開發、Linux、C語言、C、數據結構、音視頻&#x1f36d; &#x1f923;本文內容&#x1f923;&a…