c ++:Avoding包含其中包含typedef的标头

时间:2018-04-26 07:27:51

标签: c++

我真的很想避免在这里开始一个新线程,但显然我没有足够的声誉和#34;回复以下帖子:

Why can't I forward declare typedefs? "

"向前声明一个typedef是没用的,你不能用它做什么,因为你不知道它是什么类型的typedef,而且非常你在C ++中可以做的很少,而不知道某种类型的东西。" - 那么为什么没有"你可以做的很少"与前进的类声明。如果你可以转发声明一个类,为什么你不能转发声明一个typedef?在这两种情况下,原因是当在另一个标题中提到名称(作为函数参数)时,避免包括类型标题。您只想告诉编译器,此类型(def)存在。 - 核10月19日&16;时间8:17 @Nuclear,前面声明一个类告诉编译器它是一个类,它告诉编译器比#34;它是一个类型",这使它可以在你不喜欢的语境中使用。 ; t需要知道类的详细信息(例如,指向类类型的指针可能对指向函数类型的指针或指向标量类型的指针具有不同的表示形式)。此外,类定义可能很大并且包含成本很高,而typedef则不然。这是一个单一的声明。您不需要为typedef添加标题,您可以重新声明它。 - Jonathan Wakely 10月19日和16日12:07

"

这句话引发了很多想法:(1)"你不需要为typedef包含一个标题,你可以重新声明它。" (a)在我看来,typedef的主要目的是让它在别处使用,名称更明确。 (b)如果你重新宣布它并且你只改变了它们中的一个地方就会有问题。为什么你真的想重新声明一个typedef?

1 个答案:

答案 0 :(得分:1)

RE

  

您为什么要重新声明typedef?

考虑size_t。它是一种类型别名,可以由许多标准库头定义。他们可能原则上都包含一个特殊的内部define-size_t-header和一个include guard(可能效率低下),或者他们可能原则上都检查一些is-size_t-defined符号(脆弱,依赖于约定的代码),但在实践中,我猜他们只是以相同的方式定义size_t的所有实现。

因此,您最终可以获得size_t别名的多个定义。只要这些定义相同,标准就可以了。