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