30

重複の可能性:
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;
}

編集:

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

4

1 に答える 1

38

それらは同じです。

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

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

「typedef指定子と同じセマンティクス」がすべてを物語っていると思います。

于 2012-06-27T10:53:21.303 に答える