C++ 'typedef' 与 'using ... = ...'[复制]

C++ 'typedef' vs. 'using ... = ...' [duplicate]

提问人:Simon 提问时间:6/27/2012 最后编辑:CommunitySimon 更新时间:6/27/2012 访问量:38116

问:

这个问题在这里已经有答案了:
11年前关闭。

可能的重复:
typedef 和 C++ 11 中的 using 有什么区别?

编译并运行以下代码。我的问题是重命名模板专业化的“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;
}

编辑:

如果没有区别,你更喜欢哪一个?/ 为什么要使用 ... = ...引入的版本?

C++ C++11 typedef using 指令

评论

0赞 pmr 6/27/2012
A 不是模板并不是引入模板的真正用例。using
1赞 Andrew 6/27/2012
-1.确切的配音:stackoverflow.com/questions/10747810/......
1赞 Simon 6/27/2012
@Andrew你说得对,我就是找不到。
0赞 Andrew 6/27/2012
@Simon:谷歌中的第一个链接:google.com/...
3赞 Zhen 8/20/2013
您是否注意到 C++11 正在到处转向从左到右的声明样式?使用 to write 类型别名更符合新的 C++11 样式。这句话来自赫伯·萨特 herbsutter.com/2013/08/12/...using

答:

38赞 daramarak 6/27/2012 #1

他们是一样的。

引用 C++11 标准(或具体草案):

typedef-name 也可以由 alias-declaration 引入。using 关键字后面的标识符 成为 typedef-name,标识符后面的可选 attribute-specifier-seq 适用于该 typedef-name。它具有相同的语义,就好像它是由 typedef 说明符引入的一样。特别是,它 不定义新类型,并且不应出现在 type-id 中。

我认为“与 typedef 说明符相同的语义”说明了一切。