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

C++11中使用using的方法

 更新時(shí)間:2021年09月23日 09:20:56   作者:冰糖葫蘆很乖  
在 C++ 中 using 用于聲明命名空間,使用命名空間也可以防止命名沖突。這篇文章主要介紹了C++11中使用using的方法,需要的朋友可以參考下

在 C++ 中 using 用于聲明命名空間,使用命名空間也可以防止命名沖突。在程序中聲明了命名空間之后,就可以直接使用命名空間中的定義的類(lèi)了。在 C++11 中賦予了 using 新的功能,讓 C++ 變得更年輕,更靈活。

1. 定義別名

在 C++ 中可以通過(guò) typedef 重定義一個(gè)類(lèi)型,語(yǔ)法格式如下:

typedef 舊的類(lèi)型名 新的類(lèi)型名;
// 使用舉例
typedef unsigned int uint_t;

被重定義的類(lèi)型并不是一個(gè)新的類(lèi)型,僅僅只是原有的類(lèi)型取了一個(gè)新的名字。和以前的聲明語(yǔ)句一樣,這里的聲明符也可以包含類(lèi)型修飾,從而也能由基本數(shù)據(jù)類(lèi)型構(gòu)造出復(fù)合類(lèi)型來(lái)。C++11 中規(guī)定了一種新的方法,使用別名聲明 (alias declaration) 來(lái)定義類(lèi)型的別名,即使用 using。

在使用的時(shí)候,關(guān)鍵字 using 作為別名聲明的開(kāi)始,其后緊跟別名和等號(hào),其作用是把等號(hào)左側(cè)的名字規(guī)定成等號(hào)右側(cè)類(lèi)型的別名。類(lèi)型別名和類(lèi)型的名字等價(jià),只要是類(lèi)型的名字能出現(xiàn)的地方,就能使用類(lèi)型別名。使用typedef定義的別名和使用using定義的別名在語(yǔ)義上是等效的。

使用 using 定義別名的語(yǔ)法格式是這樣的:

using 新的類(lèi)型 = 舊的類(lèi)型;
// 使用舉例
using uint_t = int;

通過(guò) using 和 typedef 的語(yǔ)法格式可以看到二者的使用沒(méi)有太大的區(qū)別,假設(shè)我們定義一個(gè)函數(shù)指針,using 的優(yōu)勢(shì)就能凸顯出來(lái)了,看一下下面的例子:

// 使用typedef定義函數(shù)指針
typedef int(*func_ptr)(int, double);

// 使用using定義函數(shù)指針
using func_ptr1 = int(*)(int, double);

如果不是特別熟悉函數(shù)指針與 typedef,第一眼很難看出 func_ptr 其實(shí)是一個(gè)別名,其本質(zhì)是一個(gè)函數(shù)指針,指向的函數(shù)返回類(lèi)型是 int,函數(shù)參數(shù)有兩個(gè)分別是 int,double 類(lèi)型。

使用 using 定義函數(shù)指針別名的寫(xiě)法看起來(lái)就非常直觀了,把別名的名字強(qiáng)制分離到了左邊,而把別名對(duì)應(yīng)的實(shí)際類(lèi)型放在了右邊,比較清晰,可讀性比較好。

2. 模板的別名

使用 typedef 重定義類(lèi)似很方便,但是它有一點(diǎn)限制,比如無(wú)法重定義一個(gè)模板,比如我們需要一個(gè)固定以 int 類(lèi)型為 key 的 map,它可以和很多類(lèi)型的 value 值進(jìn)行映射,如果使用 typedef 這樣直接定義就非常麻煩:

typedef map<int, string> m1;
typedef map<int, int> m2;
typedef map<int, double> m3;

在這種情況下我們就不自覺(jué)的想到了模板:

template <typename T>
typedef map<int, T> type; // error, 語(yǔ)法錯(cuò)誤

使用 typename 不支持給模板定義別名,這個(gè)簡(jiǎn)單的需求僅通過(guò) typedef 很難辦到,需要添加一個(gè)外敷類(lèi):

#include <iostream>
#include <functional>
#include <map>
using namespace std;

template <typename T>
// 定義外敷類(lèi)
struct MyMap
{
    typedef map<int, T> type;
};

int main(void)
{
    MyMap<string>::type m;
    m.insert(make_pair(1, "luffy"));
    m.insert(make_pair(2, "ace"));

    MyMap<int>::type m1;
    m1.insert(1, 100);
    m1.insert(2, 200);

    return 0;
}

通過(guò)上邊的例子可以直觀的感覺(jué)到,需求簡(jiǎn)單但是實(shí)現(xiàn)起來(lái)并不容易。在 C++11 中,新增了一個(gè)特性就是可以通過(guò)使用 using 來(lái)為一個(gè)模板定義別名,對(duì)于上面的需求可以寫(xiě)成這樣:

template <typename T>
using mymap = map<int, T>;

完整的示例代碼如下:

#include <iostream>
#include <functional>
#include <map>
using namespace std;

template <typename T>
using mymap = map<int, T>;

int main(void)
{
    // map的value指定為string類(lèi)型
    mymap<string> m;
    m.insert(make_pair(1, "luffy"));
    m.insert(make_pair(2, "ace"));

    // map的value指定為int類(lèi)型
    mymap<int> m1;
    m1.insert(1, 100);
    m1.insert(2, 200);

    return 0;
}

上面的例子中通過(guò)使用 using 給模板指定別名,就可以基于別名非常方便的給 value 指定相應(yīng)的類(lèi)型,這樣使編寫(xiě)的程序變得更加靈活,看起來(lái)也更加簡(jiǎn)潔一些。

最后在強(qiáng)調(diào)一點(diǎn):using 語(yǔ)法和 typedef 一樣,并不會(huì)創(chuàng)建出新的類(lèi)型,它們只是給某些類(lèi)型定義了新的別名。using 相較于 typedef 的優(yōu)勢(shì)在于定義函數(shù)指針別名時(shí)看起來(lái)更加直觀,并且可以給模板定義別名。

到此這篇關(guān)于C++11中使用using的方法的文章就介紹到這了,更多相關(guān)C++11 using使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

钦州市| 大田县| 沁源县| 安龙县| 沙坪坝区| 渝中区| 扬州市| 岑巩县| 遂溪县| 阿勒泰市| 昭平县| 康马县| 岳普湖县| 莱阳市| 小金县| 阜城县| 义马市| 资兴市| 奇台县| 甘南县| 沾益县| 汉沽区| 苏尼特左旗| 扶余县| 伊宁县| 边坝县| 乌鲁木齐市| 胶州市| 金坛市| 无极县| 陇西县| 九江市| 和龙市| 繁峙县| 儋州市| 桐庐县| 顺昌县| 喀喇| 霍山县| 视频| 蒲江县|