c/c++類型別名定義


author: hjjdebug
date: 2025年 05月 28日 星期三 12:54:25 CST
descrip: c/c++類型別名定義:


文章目錄

  • 1. #define 是宏替換.
  • 2. c風格的typedef 通用形式 typedef type_orig alias
  • 3. c++風格的using 為類型定義別名的一般格式: using alias = type_orig
  • 4. using 的優點: 可以直接使用模板類型,
  • 5.測試代碼, 順便測試一下引用折疊.

#define, typedef, using 都可以定義類型別名.

1. #define 是宏替換.

它可以定義任何東西,不只是類型,實現以簡單換復雜.
帶參宏也可以定義非常復雜的替換.
缺點是編譯器只是進行字符串替換. 編譯期無類型檢查.復雜定義時邏輯不清晰,

c格式的typedef和c++格式的using 才是專門為類型定義別名而生.

2. c風格的typedef 通用形式 typedef type_orig alias

例如:
typedef unsigned int u_int;
typedef int(*add)(int i1,int i2);

3. c++風格的using 為類型定義別名的一般格式: using alias = type_orig

例如:
using u_int=unsigned int;
using add=int(*)(int i1,int i2);

4. using 的優點: 可以直接使用模板類型,

例如:
template
using Vec = std::vector;

typedef 不能直接使用模板類型.
例如:
template
typedef T&& doubleR; // error: template declaration of ‘typedef’

typedef 要想使用模板類型,只能外包裝一個類才可以使用.
例如:
template
struct DoubleRefHelper {
typedef T&& type; // 在類模板中用typedef定義別名, 小名type是屬于類的.
};

5.測試代碼, 順便測試一下引用折疊.

$ cat main.cpp
#include <stdio.h>
//模板類中, using 更方便,可直接使用模板類型, typedef還要定義在類模板中
template <typename T>
using DoubleRef = T&&;  //T 可以直接使用/*template <typename T>typedef T&&  doubleR;  //  error: template declaration of ‘typedef’*/
template <typename T>
struct DoubleRefHelper {typedef T&& type;  // 在類模板中用typedef 使用模板類型定義別名
};int main()
{  //引用類型推導規則.DoubleRef<int> x = 3;  // int + &&實際類型為 int&&(折疊后)DoubleRef<int&> y = x;  // int & + &&實際類型為 int&(折疊后)DoubleRef<int&&> z = 5;  // int && + &&實際類型為 int&&(折疊后)printf("x:%d,y:%d,z:%d\n",x,y,z);// 使用時需加class_name和::type, 小名type是屬于類的.DoubleRefHelper<int>::type i = 8;  // 等價于int&&printf("i:%d\n",i);return 0;
}

執行結果:

$ ./tt
x:3,y:3,z:5
i:8

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

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

相關文章

Virtuoso中對GDS文件進行工藝庫轉換的方法

如果要對相同工藝節點下進行性能評估&#xff0c;可以嘗試將一個廠商的GDS文件轉換到另一個廠商&#xff0c;不過要注意的是不同廠商&#xff08;比如SMIC和TSMC&#xff09;之間的DRC規則&#xff0c;盡量采用兩個DRC中的約束較為緊張的廠商進行設計&#xff0c;以免轉換到另外…

Kubernetes 中部署 kube-state-metrics 及 Prometheus 監控配置實戰

文章目錄 Kubernetes 中部署 kube-state-metrics 及 Prometheus 監控配置實戰環境準備創建監控命名空間準備配置文件創建 ServiceAccount配置 RBAC 權限部署 kube-state-metrics部署node_exporter(可選)驗證服務賬號 TokenPrometheus 配置示例小結驗證增加Grafana面板增加prome…

《重塑認知:Django MVT架構的多維剖析與實踐》

MVT&#xff0c;即Model - View - Template&#xff0c;是Django框架獨特的架構模式。它看似簡單的三個字母&#xff0c;實則蘊含著深刻的設計哲學&#xff0c;如同古老智慧的密碼&#xff0c;解開了Web應用開發的復雜謎題。 模型&#xff0c;是MVT架構中的數據核心&#xff0…

【JVM】初識JVM 從字節碼文件到類的生命周期

初識JVM JVM&#xff08;Java Virtual Machine&#xff09;即 Java 虛擬機&#xff0c;是 Java 技術的核心組件之一。JVM的本質就是運行在計算機上的一個程序&#xff0c;通過軟件模擬實現了一臺抽象的計算機的功能。JVM是Java程序的運行環境&#xff0c;負責加載字節碼文件&a…

人工智能在智能零售中的創新應用與未來趨勢

隨著電子商務的蓬勃發展和消費者需求的不斷變化&#xff0c;零售行業正面臨著前所未有的挑戰和機遇。智能零售作為零售行業的重要發展方向&#xff0c;通過引入人工智能&#xff08;AI&#xff09;、物聯網&#xff08;IoT&#xff09;、大數據和云計算等前沿技術&#xff0c;正…

DeepSeek 賦能智能物流:解鎖倉儲機器人調度的無限可能

目錄 一、智能物流倉儲機器人調度現狀1.1 傳統調度面臨的挑戰1.2 現有智能調度的進展與局限 二、DeepSeek 技術探秘2.1 DeepSeek 核心技術原理2.2 DeepSeek 的獨特優勢 三、DeepSeek 在智能物流倉儲機器人調度中的創新應用3.1 智能任務分配與調度3.2 路徑規劃與避障優化3.3 實時…

Vue CLI創建vue項目,安裝插件

Vue CLI創建vue項目&#xff0c;安裝插件 一、創建項目1. 安裝Vue CLI2. 創建項目 二、安裝插件routerlesssassjquery 一、創建項目 1. 安裝Vue CLI npm install -g vue/cli2. 創建項目 vue create project cd project二、安裝插件 router npm install vue-router # 對于 …

小白成長之路-Linux程序管理(二)

文章目錄 一、源碼包&#xff08;編譯&#xff09;安裝1.安裝前先查看磁盤大小2.壓縮包的位置3.執行編譯 二、二進制安裝三、Linux操作系統啟動流程3.1概述3.2啟動流程核心階段1.電源與固件階段2.引導加載程序3.內核初始化4.systemd初始化進程5. 用戶登錄階段 四、systemd管理機…

Ansible模塊——Ansible的安裝!

Ansible 安裝 Ansible 有三種安裝方式&#xff0c;源碼安裝、發行版安裝和 Python 安裝。 使用發行版安裝或 Python 安裝兩種方式時&#xff0c;Ansible 的安裝包有兩個&#xff0c;區別如下&#xff1a; ? ansible-core&#xff1a;一種極簡語言和運行時包&#xff0c;包含…

《全面解析鴻蒙相關概念:鴻蒙、開源鴻蒙、鴻蒙 Next 有何區別》

大家好&#xff0c;這里是程序員晚楓&#xff0c;最近接了一個和鴻蒙電腦有關的商單&#xff0c;所以專門花時間研究了一下和鴻蒙有關的概念。 鴻蒙系統相關概念主要有以下三個&#xff0c;它們之間存在多方面的區別&#xff0c;以下是具體介紹&#xff1a; OpenHarmony 定義…

C# 數組與字符串:全面解析與應用實踐

在C#編程語言中&#xff0c;數組和字符串是兩種最基礎也是最重要的數據類型。無論是簡單的控制臺應用程序&#xff0c;還是復雜的企業級系統&#xff0c;數組和字符串都扮演著不可或缺的角色。本文將全面深入地探討C#中數組和字符串的特性、使用方法、性能考量以及實際應用場景…

VR 技術在農業領域或許是一抹新曙光?

在科技日新月異的今天&#xff0c;VR(虛擬現實)技術已不再局限于游戲、影視等娛樂范疇&#xff0c;正逐步滲透到各個傳統行業&#xff0c;為其帶來全新的發展契機&#xff0c;農業領域便是其中之一。VR 技術利用計算機生成三維虛擬世界&#xff0c;給予用戶視覺、聽覺、觸覺等多…

SPEAR開源程序是用于逼真演示 AI 研究的模擬器

?一、軟件介紹 文末提供程序和源碼下載 SPEAR開源程序是用于逼真具身 AI 研究的模擬器 二、AI 研究的模擬器 交互式模擬器正在成為訓練具體代理的強大工具&#xff0c;但現有的模擬器存在內容多樣性、物理交互性和視覺保真度有限的問題。我們通過引入 SPEAR&#xff1a;照片…

第1章 Redis 概述

一、Redis 簡介 Redis,Remote Dictionary Server,遠程字典服務,由意大利人Salvatore Sanfilippo(又名Antirez)開發,是一個使用ANSI C 語言編寫&#xff64;支持網絡&#xff64; 可基于內存亦可持久化的日志型&#xff64;NoSQL 開源內存數據庫,其提供多種語言的API&#xff61…

圖論學習筆記 5 - 最小樹形圖

我們不廢話&#xff0c;直接進入正題&#xff1a;最小樹形圖&#xff0c;一個名字看起來很高級的東西。 聲明&#xff1a;為了便于理解&#xff0c;可能圖片數量會有億點點多。圖片尺寸可能有的較大。 概念 最小樹形圖的英文是 Directed Minimum Spanning Tree。 相信懂英文…

力扣面試150題--完全二叉樹的節點個數

Day 51 題目描述 思路 根據完全二叉樹的規律&#xff0c;完全二叉樹的高度可以直接通過不斷地訪問左子樹就可以獲取&#xff0c;判斷左右子樹的高度: 1. 如果相等說明左子樹是滿二叉樹, 然后進一步判斷右子樹的節點數(最后一層最后出現的節點必然在右子樹中&#xff09; 2. 如…

社區造數服務接入MCP|得物技術

一、背景 ? 今年 MCP 的概念非常火&#xff0c;市面上也涌現出了一大批 MCP 相關工具。作為技術一線者&#xff0c;都會按捺不住地去實操一下&#xff0c;很早的時候就有個設想&#xff0c;如果把我們的測試工具都改造為符合 MCP 服務協議標準&#xff0c;然后全部接入 AI A…

Mysql 查詢時間段內的sql優化

Mysql 查詢時間段內的sql優化 一說寫到查詢某個時間段的sql查詢,我們就會使用DATE_FORMAT函數格式化日期字段: 比如查詢某年某月的數據,我們可能常用的方式如下 DATE_FORMAT(pay_time,%Y-%m)=DATE_FORMAT(now(),%Y-%m) 但是這樣做會使索引失效,尤其在數據量越來越多的情況…

用 Deepseek 寫的 html+js 密碼生成器

下面是一個功能完整的密碼生成器HTMLJS實現&#xff0c;包含數字、小寫字母、大寫字母、符號、避免重復字符和密碼長度設置功能。 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&…

WPF綁定

如何使用綁定去改變事件驅動的關系。 先介紹一下標簽擴展 目錄 控件與控件之間的綁定 代碼分析 綁定語法詳解 1. Binding - 綁定標記 2. ElementName=slider - 綁定源 3. Path=Value - 綁定路徑 不同控件屬性的默認模式: 控件和屬性綁定 1. 數據模型類的作用 2. 窗…