Wiem, że w C ++ 11 możemy teraz używać using
do pisania aliasu typu, takiego jak typedef
s:
typedef int MyInt;
Z tego, co rozumiem, jest równoważne z:
using MyInt = int;
Ta nowa składnia powstała w wyniku wysiłku, aby wyrazić „ template typedef
”:
template< class T > using MyType = AnotherType< T, MyAllocatorType >;
Ale czy w przypadku dwóch pierwszych przykładów innych niż szablony istnieją inne subtelne różnice w standardzie? Na przykład typedef
aliasing w „słaby” sposób. Oznacza to, że nie tworzy nowego typu, a jedynie nową nazwę (konwersje są niejawne między tymi nazwami).
Czy jest tak samo z using
czy generuje nowy typ? Czy są jakieś różnice?
typedef void MyFunc(int,int);
(co tak naprawdę nie wygląda tak źle), lubusing MyFunc = void(&)(int,int);
using MyFunc = void(&)(int,int);
? czy to znaczy, że MyFunc
jest odwołaniem do funkcji? co jeśli pominiesz & ?
typedef void (&MyFunc)(int,int);
. Jeśli pominiesz, jest &
to odpowiedniktypedef void MyFunc(int,int);
typedef void (&MyFunc)(int,int);
czyusing MyFunc = void(int,int);
?