Я знаю, что в C ++ 11 теперь мы можем использовать using
для записи псевдоним типа, например, typedef
s:
typedef int MyInt;
Насколько я понимаю, эквивалентно:
using MyInt = int;
И этот новый синтаксис возник в результате попытки выразить " template typedef
":
template< class T > using MyType = AnotherType< T, MyAllocatorType >;
Но с первыми двумя примерами, не относящимися к шаблону, есть ли еще какие-то тонкие различия в стандарте? Например, typedef
s делают псевдонимы «слабым» способом. То есть он не создает новый тип, а только новое имя (между этими именами неявные преобразования).
Это то же самое с 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);
?