Wiem, że w C++ 11 możemy teraz używać using
napisać typu alias, jak typedef
s:Jaka jest różnica między "typedef" i "using" w C++ 11?
typedef int MyInt;
Czy, z tego co rozumiem, co odpowiada:
using MyInt = int;
i że nowa składnia wyłonił się z wysiłkiem mieć sposób, aby wyrazić „template typedef
”:
template< class T > using MyType = AnotherType< T, MyAllocatorType >;
Ale z pierwszymi dwoma non-t przykłady emplate, czy są jakieś inne subtelne różnice w standardzie? Na przykład: typedef
s aliasing w "słaby" sposób. To znaczy, że nie tworzy nowego typu, ale tylko nową nazwę (konwersje są niejawne między tymi nazwami).
Czy to samo jest z using
lub czy generuje nowy typ? Czy są jakieś różnice?
ja osobiście wolę nową składnię, ponieważ jest znacznie bardziej podobny do zwykłego przypisania zmiennej, poprawy czytelności. Na przykład wolisz 'typedef void (& MyFunc) (int, int);' lub 'using MyFunc = void (int, int);'? –
W pełni się zgadzam, teraz używam tylko nowej składni. Dlatego pytałem, aby mieć pewność, że naprawdę nie ma różnicy. – Klaim
@ MatthieuM. te dwa są różne przy okazji. Powinien to być 'typedef void MyFunc (int, int);' (który tak naprawdę nie wygląda tak źle) lub 'using MyFunc = void (&) (int, int);' –