typedef和using在语义上是等价的是什么意思?

时间:2017-05-05 16:00:56

标签: c++

“typedef”和“using”在语义上是等价的是什么意思?我主要关注的是“语义等价”。我试图看起来“语义上”,但它没有真正提到任何同义词或意义,我可以将其与编程世界中单词的用法联系起来。

2 个答案:

答案 0 :(得分:1)

这只是意味着他们做同样的事情,即使他们的语法略有不同*。例如以下内容:

typedef int INTEGER;

可以使用using语法编写,如下所示:

using INTEGER = int;

* using语法也适用于typedef不具备的模板,但对于非模板,它们是等效的。

答案 1 :(得分:1)

您可以将using视为别名:

using a = b<c>;

可以被视为&#34;作为一种类型,a表示b<c>&#34;。

typedef 完全相同,但它来自C语言并使用与变量声明相同的语法,当与多层模板一起使用时很难读取它们,数组,cv分类器,函数类型等:

typedef int const* (*func_t)(std::vector<int> const&);
// The same:
using func_t = int const* (*)(std::vector<int> const&);

对我来说,using要好得多,因为你可以很容易地看到这个名字。

另一个区别是您可以将using与模板参数一起使用。有一段时间,我在黑客代码中使用了这个:

template<typename T>
using set_it = std::set<T>::iterator;

每次我使用set_it<int>作为类型时,我都会获得std::set<int>::iterator。您无法使用typedef

执行此操作