Wiem, że w C ++ 11 możemy teraz używać usingdo pisania aliasu typu, takiego jak typedefs:
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 typedefaliasing 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 usingczy 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 MyFuncjest 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);?