欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c++之類型別名的實現

 更新時間:2025年02月19日 08:53:58   作者:_DCG_  
本文主要介紹了c++之類型別名的實現,包括C++98版本使用typedef關鍵字和C++11版本推薦使用using關鍵字來創(chuàng)建類型別名,具有一定的參考價值,感興趣的可以了解一下

類型別名,顧名思義就是為一個類型創(chuàng)建一個新的名稱,使用這個新的名稱與使用之前的名稱一模一樣。

c++98版本的類型別名

c++98版本的類型別名方式使用的是typedef關鍵字,通過typedef關鍵字實現的類型別名,下面將展示一些c++98版本的類型別名方式。

//基本類型別名
typedef int Integer;  //不要忘記逗號
typedef unsigned int UInt; //不要忘記逗號

//指針類型別名
typedef int* IntPtr;  //不要忘記逗號
typedef char* CharPtr;  //不要忘記逗號

//函數指針別名
typedef void (*FuncPtr)(int, int);  

//復雜類型別名
typedef std::vector<std::string> StringVector;
typedef std::map<std::string, int> StringIntMap; 

現代c++的類型別名方式

在c++11版本引入了using,通過using實現類型別名,詳細的示例如下所示:

//基本類型的類型別名
using Integer = int;
using UInt = unsigned int;

//指針類型的類型別名
using IntPtr = int*;
using CharPtr = char*;

//函數指針的類型別名
using FuncPtr = void(*)(int, int);

//復雜類型的類型別名
using StringVector = std::vector<std::string>;
using StringIntMap = std::map<std::string, int>;

為什么引入using?

之所以引入using作為推薦的類型別名方式,是因為using方式相對于typedef有著明顯的優(yōu)勢。

  • 更清晰的語法
typedef void(*FuncPtr)(int, int);  //typedef形式
using FuncPtr = void(*)(int, int);  //using形式,更直觀
  •  模板別名支持

typedef不支持模板別名,但是using支持模板別名。請看下面的例子:

// 使用using可以創(chuàng)建模板別名
template<typename T>
using Vec = std::vector<T>;

// 使用示例
Vec<int> numbers;        // 等價于 std::vector<int>
Vec<std::string> words;  // 等價于 std::vector<std::string>

// typedef無法直接實現模板別名,需要額外包裝
template<typename T>
struct VectorTypedef {
    typedef std::vector<T> type;
};

常見場景

簡化復雜類型

很多時候寫一些復雜類型的時候,每次創(chuàng)建該類型的變量或者其他使用該類型的場景,都需要寫很長的類型名,通過類型別名,我們可以定義一個簡短的名字,后續(xù)使用到該類型時,使用這個別名即可。請看下面的例子:

//簡化stl容器
using StringSet = std::set<std::string>;
using IntMatrix = std::vector<std::vector<int>>;

// 簡化智能指針類型
using StringPtr = std::shared_ptr<std::string>;
using IntUPtr = std::unique_ptr<int>;

回調函數類型

using ErrorCallback = std::function<void(const std::string&)>;
using EventHandler = std::function<void(const Event&)>;

在類中使用類型別名

class Container {
public:
    using value_type = int;
    using pointer = value_type*;
    using reference = value_type&;
    
    // STL風格的類型別名
    using iterator = std::vector<value_type>::iterator;
    using const_iterator = std::vector<value_type>::const_iterator;
private:
    std::vector<value_type> data;
};

注意事項

在c++11及以后的c++版本中推薦使用using,不推薦使用typedef.

到此這篇關于c++之類型別名的實現的文章就介紹到這了,更多相關c++ 類型別名內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • c++??復制消除問題解決示例詳析

    c++??復制消除問題解決示例詳析

    這篇文章主要為大家介紹了c++??復制消除問題解決示例詳析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Qt編寫地圖實現動態(tài)點位標注的示例代碼

    Qt編寫地圖實現動態(tài)點位標注的示例代碼

    動態(tài)點位標注是定制的一個功能模塊,提供直接地圖上選點設置標記點,點位信息用結構體存儲,其中包括了經度、緯度、速度、時間等信息。本文將介紹實現這一功能的示例代碼,需要的可以參考一下
    2022-01-01
  • C語言基礎之C語言格式化輸出函數printf詳解

    C語言基礎之C語言格式化輸出函數printf詳解

    這篇文章主要介紹了C語言格式化輸出函數printf詳解,printf函數中用到的格式字符與printf函數中用到的格式修飾符,感興趣的小伙伴可以借鑒一下
    2023-03-03
  • c++調用python實現圖片ocr識別

    c++調用python實現圖片ocr識別

    所謂c++調用python,實際上就是在c++中把整個python當作一個第三方庫引入,然后使用特定的接口來調用python的函數或者直接執(zhí)行python腳本,本文介紹的是調用python實現圖片ocr識別,感興趣的可以了解下
    2023-09-09
  • C++中幾種將整數轉換成二進制輸出的方法總結

    C++中幾種將整數轉換成二進制輸出的方法總結

    下面小編就為大家?guī)硪黄狢++中幾種將整數轉換成二進制輸出的方法總結。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • QT實現多文件拖拽獲取路徑的方法

    QT實現多文件拖拽獲取路徑的方法

    這篇文章主要為大家詳細介紹了QT實現多文件拖拽獲取路徑的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 淺析C++中的函數重載

    淺析C++中的函數重載

    這篇文章主要介紹了淺析C++中的函數重載,在C++中,可以為兩個或兩個以上的函數提供相同的函數名稱,只要參數類型不同,或者參數類型相同而參數個數不同,又或者參數類型參數個數相同,參數次序不同,稱為函數重載,需要的朋友可以參考下
    2023-08-08
  • C++自帶的sort函數如何對vector容器元素進行排序

    C++自帶的sort函數如何對vector容器元素進行排序

    這篇文章主要介紹了C++自帶的sort函數如何對vector容器元素進行排序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • C++ Boost命令行解析庫的應用詳解

    C++ Boost命令行解析庫的應用詳解

    命令行解析庫是一種用于簡化處理命令行參數的工具,它可以幫助開發(fā)者更方便地解析命令行參數并提供適當的幫助信息,本文主要介紹了不同的命令行解析庫和它們在C++項目中的應用,希望對大家有所幫助
    2023-11-11
  • opencv提取水平與垂直線條

    opencv提取水平與垂直線條

    這篇文章主要為大家詳細介紹了opencv提取水平與垂直線條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評論