ฉันรู้ว่าใน C ++ 11 ตอนนี้เราสามารถใช้using
เพื่อเขียนนามแฝงประเภทเช่นtypedef
s:
typedef int MyInt;
คือจากสิ่งที่ฉันเข้าใจเทียบเท่ากับ:
using MyInt = int;
และไวยากรณ์ใหม่นั้นเกิดขึ้นจากความพยายามที่จะมีวิธีในการแสดงออก " template typedef
":
template< class T > using MyType = AnotherType< T, MyAllocatorType >;
แต่ด้วยสองตัวอย่างแรกที่ไม่ใช่แม่แบบมีความแตกต่างเล็กน้อยอื่น ๆ ในมาตรฐานหรือไม่ ตัวอย่างเช่นใช้typedef
นามแฝงด้วยวิธี "อ่อนแอ" นั่นคือมันไม่ได้สร้างประเภทใหม่ แต่มีเพียงชื่อใหม่เท่านั้น (การแปลงนั้นมีนัยยะระหว่างชื่อเหล่านั้น)
มันเหมือนกันกับusing
หรือสร้างชนิดใหม่หรือไม่ มีความแตกต่างหรือไม่?
typedef void MyFunc(int,int);
(ซึ่งจริงๆแล้วดูไม่เลว) หรือusing MyFunc = void(&)(int,int);
using MyFunc = void(&)(int,int);
? หมายความว่าMyFunc
เป็นการอ้างอิงถึงฟังก์ชั่นหรือไม่? สิ่งที่ถ้าคุณละเว้น& ?
typedef void (&MyFunc)(int,int);
มันเทียบเท่ากับ หากคุณละเว้นสิ่ง&
นี้ก็เท่ากับtypedef void MyFunc(int,int);
typedef void (&MyFunc)(int,int);
หรือusing MyFunc = void(int,int);
?