web-dev-qa-db-ja.com

C ++ 'typedef'対 'using ... = ...'

可能性のある複製:
typedefとC++ 11での使用の違いは何ですか?

次のコードはコンパイルして実行されます。私の質問は、テンプレートの特殊化の名前を変更するための「typedef」メソッドと「using」メソッドの違いは何ですか?

template<typename T>
struct myTempl{
    T val;
};

int main (int, char const *[])
{
    using templ_i = myTempl<int>;
    templ_i i;
    i.val=4;

    typedef myTempl<float> templ_f;
    templ_f f;
    f.val=5.3;

    return 0;
}

編集:

違いがない場合、どちらを選びますか? /使用... = ...バージョンが導入されたのはなぜですか?

26
Simon

同じです

C++ 11標準(または具体的なドラフト)を引用するには:

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

"typedef指定子と同じセマンティクス"がすべてを言うと思います.

33
daramarak