Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ typedef和using在语义上是等价的是什么意思?_C++ - Fatal编程技术网

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

C++ typedef和using在语义上是等价的是什么意思?,c++,C++,“typedef”和“using”在语义上是等价的是什么意思?我主要关注的是“语义对等”这个词。我试着从“语义”上查找,但它并没有真正提到任何同义词或与该词在编程世界中的用法相关的含义。它只是意味着它们做相同的事情,即使它们在语法上略有不同*。例如: typedef int INTEGER; 可以使用语法编写,如下所示: using INTEGER = int; *using语法也适用于typedef不适用的模板,但对于非模板,它们是等效的。您可以考虑使用作为别名: using a = b&

“typedef”和“using”在语义上是等价的是什么意思?我主要关注的是“语义对等”这个词。我试着从“语义”上查找,但它并没有真正提到任何同义词或与该词在编程世界中的用法相关的含义。

它只是意味着它们做相同的事情,即使它们在语法上略有不同*。例如:

typedef int INTEGER;
可以使用
语法编写,如下所示:

using INTEGER = int;

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

您可以考虑使用
作为别名:

using a = b<c>;
对我来说,
使用
要好得多,因为你可以很容易地看到名字

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

template<typename T>
using set_it = std::set<T>::iterator;
模板
使用set_it=std::set::iterator;

每次我使用
set\u it
作为类型时,我都会得到一个
std::set::iterator
。你不能用
typedef

这样做。语义学是语言学中处理意义的分支。所以说某些东西是“语义等价的”,通常意味着“它们的意思完全相同,对程序有相同的影响。”有些东西是
使用
可以做到的
typedef
不能做到的(比如模板化),但除此之外,两者对编译都有相同的影响:它们都创建了一个别名。可能是“并且每次我使用
set\u it
作为类型时,我都得到了一个
std::set::iterator
”-嗯,是的。但这正是为什么在C++11中,
auto
关键字得到了修改的语义,这样您就不必重复类型。你选的样品真差。
template<typename T>
using set_it = std::set<T>::iterator;