最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++之類型別名的實(shí)現(xiàn)

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

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

c++98版本的類型別名

c++98版本的類型別名方式使用的是typedef關(guān)鍵字,通過typedef關(guān)鍵字實(shí)現(xiàn)的類型別名,下面將展示一些c++98版本的類型別名方式。

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

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

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

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

現(xiàn)代c++的類型別名方式

在c++11版本引入了using,通過using實(shí)現(xiàn)類型別名,詳細(xì)的示例如下所示:

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

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

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

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

為什么引入using?

之所以引入using作為推薦的類型別名方式,是因?yàn)閡sing方式相對于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;        // 等價(jià)于 std::vector<int>
Vec<std::string> words;  // 等價(jià)于 std::vector<std::string>

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

常見場景

簡化復(fù)雜類型

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

//簡化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>;

回調(diào)函數(shù)類型

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風(fēng)格的類型別名
    using iterator = std::vector<value_type>::iterator;
    using const_iterator = std::vector<value_type>::const_iterator;
private:
    std::vector<value_type> data;
};

注意事項(xiàng)

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

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

相關(guān)文章

最新評論

张北县| 金昌市| 绍兴县| 沁源县| 河南省| 徐水县| 高雄县| 临夏市| 外汇| 静安区| 磐安县| 金门县| 张家口市| 彭泽县| 南安市| 城市| 崇文区| 弥勒县| 南平市| 巴塘县| 大渡口区| 都兰县| 夹江县| 石楼县| 高陵县| 兴安县| 阿尔山市| 泽州县| 中牟县| 淮滨县| 莫力| 临邑县| 濮阳市| 沙河市| 南充市| 娄烦县| 三明市| 兴国县| 宜章县| 子长县| 汝州市|