網站首頁 編程語言 正文
類中使用定義的類型別名
1 typedef定義類型別名
1.1 使用方法
在C++中,typedef關鍵字用來定義類型的別名。
typedef int MYINT;
此時,MYINT是int的別名,可以將MYINT作為數據類型來定義其他變量。
MYINT myint;
其中,myint的類型是MYINT 。
1.2 注意事項
不能使用typedef對類型別名MYINT進行重復定義。
typedef int MYINT;
typedef double MYINT;
此時,編譯器報錯,報錯信息為“ error C2371: “MYINT”: 重定義;不同的基類型”。
2 在類中使用typedef定義的類型別名
2.1 使用方法
在類中也可以使用“1 typedef定義類型別名”中定義的int的類型別名MYINT。
class MyClass {
? MYINT i;
};
此時,自定義類MyClass的成員變量i的類型是int。
2.2 注意事項
在類中可以對類型別名MYINT進行重復定義。
typedef int MYINT;
class MyClass {
? MYINT i;
? typedef double MYINT;
? MYINT j;
};
此時,自定義類MyClass的成員變量i的類型是int,而成員變量j的類型是double。
關于類型別名的總結
數組(本內容摘錄自《C++ Primer 第五版》P205)
typedef int arrt[10]; ?//arrt是一個類型別名,
?? ??? ??? ??? ??? ? ? //它表示的類型是含有10個整數的數組
using arrt=int[10];?? ? ? //arrt的等價聲明
arrt* func(int i);?? ? ? //func返回一個指向含有10個整數的數組的指針
函數指針形參(本內容摘錄自《C++ Primer 第五版》P222)
/*
*顯式地將形參定義成指向函數的指針
*/
void useBigger(const string &s1, const string &s2,
?? ??? ??? ??? ?bool (*pf)(const string &,const string &));
bool lengthCompare(const string &, const string &);
正如useBigger的聲明語句所示,直接使用函數指針類型作形參顯得冗長而煩瑣。類型別名和decltype能讓我們簡化使用了函數指針的代碼:
//Func和Func2是函數類型
typedef bool Func(const string &, const string &);
typedef decltype(lengthCompare) Func2;?? ??? ??? ?//等價的類型
//FuncP和FuncP2是指向函數的指針
typedef bool(*Funcp)(const string &, const string &);
typedef decltype(lengthCompare) *FuncP2;?? ??? ?//等價的類型
我們使用typedef定義自己的類型。Func和Func2是函數類型,而FuncP和FuncP2是指針類型。需要注意的是,decltype返回函數類型,此時不會將函數類型自動轉換成指針類型。因為decltype的結果是函數類型,所以只有在結果前面加上*才能得到指針。可以使用如下的形式重新聲明useBigger:
//useBigger的等價聲明,其中使用了類型別名
void useBigger(const string &, const string &, Func);
void useBigger(const string &, const string &, FuncP2);
這兩個聲明語句聲明的是同一個函數,在第一條語句中,編譯器自動地將Func表示的函數類型轉換成指針。
返回指向函數的指針
和數組類似,雖然不能返回一個函數,但是能返回指向函數類型的指針。然而,我們必須把返回類型寫成指針形式,編譯器不會將函數返回類型當成對應的指針類型處理。與往常一樣,要想聲明一個返回函數指針的函數,最簡單的辦法是使用類型別名:
using F = int(int*, int);?? ??? ?//F是返回類型,不是指針
using PF = int(*)(int*, int);?? ?//PF是指針類型
其中我們使用類型別名將F定義成函數類型,將PF定義成指向函數類型的指針。必須時刻注意的是,和函數類型的形參不一樣,返回類型不會自動地轉換成指針。我們必須顯式地將返回類型指定為指針:
PF f1(int);?? ??? ?//正確:PF是指向函數的指針,f1返回指向函數的指針
F f1(int);?? ??? ?//錯誤:F是函數類型,f1不能返回一個函數
F *f1(int);?? ??? ?//正確:顯式地指定返回類型是指向函數的指針
原文鏈接:https://blog.csdn.net/hou09tian/article/details/109176470
相關推薦
- 2022-11-20 C++遞歸算法處理島嶼問題詳解_C 語言
- 2022-04-02 C語言實現二叉樹層次遍歷介紹_C 語言
- 2022-05-19 Python學習之異常斷言詳解_python
- 2022-07-29 C++深入分析回顧函數重載_C 語言
- 2022-12-05 Django中使用AJAX的詳細過程_python
- 2023-12-26 錯誤代碼: 1231Variable ‘sql_notes‘ can‘t be set to the
- 2022-02-13 上傳文件出現 413 Request Entity Too Large
- 2023-07-08 C++在Qt中使用Python報錯
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支