C 11中使用using的方法

2022-09-24 12:51:09 字數 2085 閱讀 7234

在 c++ 中 using 用於宣告命名空間,使用命名空間也可以防止命名衝突。在程式中宣告了命名空間之後,就可以直接使用命名空間中的定義的類了。在 c++11 中賦予了 using 新的功能,讓 c++ 變得更年輕,更靈活。

在 c++ 中可以通過 typedef 重定義乙個型別,語法格式如下:

typedef 舊的型別名 新的型別名;

// 使用舉例

typedef unsigned int uint_t;

被重定義的型別並不是乙個新的型別,僅僅只是原有的型別取了乙個新的名字。和以前的宣告語句一樣,這裡的宣告符也可以包含型別修飾,從而也能由基本資料型別構造出復合型別來。c++11 中規定了一種新的方法,使用別名宣告 (alias declaration) 來定義型別的別名,即使用 using。

在使用的時候,關鍵字 using 作為別名宣告的開始,其後緊跟別名和等號,其作用是把等號左側的名字規定成等號右側型別的別名。型別別名和型別的名字等價,只要是型別的名字能出現的地方,就能使用型別別名。使用typedef定義的別名和使用using定義的別名在語義上是等效的。

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

using 新的型別 = 舊的型別;

// 使用舉例

using uint_t = int;

通過 using 和 typedef 的語法格式可以看到二者的使用沒有太大的區別,假設我們定義乙個函式指標,using 的優勢就能凸顯出來了,看一下下面的例子:

// 使用typedef定義函式指標

typedef inwww.cppcns.comt(*func_ptr)(int, double);

// 使用usi程式設計客棧ng定義函式指標

using func_ptr1 = int(*)(int, double);

如果不是特別熟悉函式指標與 typedef,第一眼很難看出 func_ptr 其實是乙個別名,其本質是乙個函式指標,指向的函式返回型別是 int,函式引數有兩個分別是 int,程式設計客棧double 型別。

使用 using 定義函式指標別名的寫法看起來就非常直觀了,把別名的名字強制分離到了左邊,而把別名對應的實際類程式設計客棧型放在了右邊,比較清晰,可讀性比較好。

使用 typedef 重定義類似很方便,但是它有一點限制,比如無法重定義乙個模板,比如我們需要乙個固定以 int 型別為 key 的 map,它可以和很多態別的 value 值進行對映,如果使用 typedef 這樣直接定義就非常麻煩:

typedef map m1;

typedef map m2;

typedef map m3;

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

template

typedef map type; // error, 語法錯誤

使用 typename 不支援給模板定義別名,這個簡單的需求僅通過 typedef 很難辦到,需要新增乙個外敷類:

#include

#include

#include

using namespace std;

template

// 定義外敷類

struct mymap

;int main(void)

通過上邊的例子可以直觀的感覺到,需求簡單但是實現起來並不容易。在 c++11 中,新增了乙個特性就是可以通過使用 using 來為乙個模板定義別名,對於上面的需求可以寫成這樣:

template

using mymap = map;

完整的示例**如下:

#include

#include

#include

using namespace std;

template

using mymap = map t>;

int main(void)

上面的例子中通過使用 using 給模板指定別名,就可以基於別名非常方便的給 value 指定相應的型別,這樣使編寫的程式變得更加靈活,看起來也更加簡潔一些。

最後在強調一點:using 語法和 typedef 一樣,並不會建立出新的型別,它們只是給某些型別定義了新的別名。using 相較於 typedef 的優勢在於定義函式指標別名時看起來更加直觀,並且可以給模板定義別名。

c 11中using的使用

這種用法估計使用最多的,為了防止定義變數名 函式名衝突,把它們定義在乙個命名空間內,使用的時候需要進行命名空間的申明 using namespace std 就不過多講解。using 還可以指定別名,比如using so3d so3 那麼它和typedef 有什麼區別?template int op...

c 11模板別名using

對於冗長或複雜的識別符號,如果能夠建立其別名將很方便。以前c 為此提供了typedef typedef std vector iterator ittype c 11提供了另一種建立別名的語法 using using ittype std vector iterator ittype 差別在於新語法...

在C 方法中使用using的意義

在c 函式方法體中使用using,表明乙個類只能在當前方法體中存在,出了方法體就會呼叫該函式的析構函式。但是該類必須實現了idisposable介面,並且除非該類的析構函式定義為虛函式且子類重寫了,否則都只會呼叫該類的析構函式,並不會像c 釋放全部記憶體,依然還是要clr去管理。與c 基類定義為虛函...