C 11 中 typedef 和 using 有什麼區別?

時間 2021-05-31 17:58:16

1樓:碧水溪風

說個真事,同事n年c++開發經驗,c++特別溜。有一次我拿typedef和#define反過來覆過去問他,一分鐘不到他就懵圈了,根本分不清typedef和#define該怎麼用了。

2樓:原子筆

using 是C++11用來擴充套件typedef 的, 不在typedef上擴充套件是為了盡可能保持C語言的相容性。

畢竟typedef屬於C語言的遺產,C++標準委員會在擴充的時候盡量避免未來可能的和C的不相容(畢竟C語言有故意製造和C++不相容的事情了),例如C語言某天打算給typedef來點什麼特色啥的

3樓:Holy Chen

如下所示,using 可以用於模板別名,typedef 不可用於模板別名。

#include

template

class A

};template

using B = A;

template

typedef A C;

int main()

4樓:馮半錢

說個特別的用法

// type alias can introduce a member typedef name

template

T>struct

Container

;// which can be used in generic programming

template

Container

>void

fn2(

const

Container&c

)// 2016/08/25 補

intmain()

c 11中std unique ptr需要明確知道型別的析構函式,而shared ptr不需要?

土地測量員 詳細講一下std unique ptr的部分吧。std unique ptr需要明確知道型別的析構函式 unique ptr型別是 template class T,class Deleter std default delete class unique ptr private T p...

C 11中的move語義減少了臨時物件和物件複製嗎?

槓吐血評論員陶某 move應該是針對你的物件中有在堆上分配記憶體這種情況而設定的,你舉的例子恰好不符合這種情況。看下面這個例子 classA A A A other A operator A other return this int p int main A中有堆上分配的變數p時,呼叫move語義...

C 11為什麼引入nullptr?

徐辰 因為C 他爹早就看0這個magic number不爽了,當年沒顧上搞,一直拖到2011年了,再不瘋狂一把C 就沒人用了。 enpeng xu 問題的關鍵是c 不知道怎麼正確做void 到 T 的預設轉換,所以多此一舉的引入了nullptr。某些情況做下c 編譯器不知道怎麼把 void ptr正...