「typedef」と「using」の違いは何ですか? 質問する

「typedef」と「using」の違いは何ですか? 質問する

usingC++11 では、次のように型エイリアスを記述できるようになりましたtypedef

typedef int MyInt;

私の理解では、これは次と同等です:

using MyInt = int;

そして、その新しい構文は、「テンプレート typedef」を表現する方法を求める取り組みから生まれました。

template< class T > using MyType = AnotherType< T, MyAllocatorType >;

しかし、最初の 2 つの非テンプレートの例では、標準に他の微妙な違いがあるのでしょうか? たとえば、typedefは「弱い」方法でエイリアス化を行います。つまり、新しい型は作成されず、新しい名前のみが作成されます (名前間の変換は暗黙的に行われます)。

同じですか、usingそれとも新しいタイプを生成しますか? 違いはありますか?

ベストアンサー1

これらは標準から見ると同等です(強調は筆者による)(7.1.3.2):

typedef-name は、alias-declaration によって導入することもできます。using キーワードに続く識別子は typedef-name になり、識別子に続くオプションの attribute-specifier-seq はその typedef-name に関連します。typedef指定子によって導入された場合と同じセマンティクスを持ちます。特に、新しい型を定義するものではなく、type-id に出現してはなりません。

おすすめ記事