【发布时间】:2010-07-11 08:17:45
【问题描述】:
摘自“卓越的 C++”:
“在过去,您可以在这种情况下将“#include”替换为“class ostream;”,因为 ostream 曾经是一个类,并且它不在命名空间 std 中。唉,没有更多了。写作“ class ostream;" 是非法的,原因有两个:
ostream 现在位于命名空间 std 中,不允许程序员声明任何存在于命名空间 std 中的东西。
ostream 现在是模板的 typedef;具体来说,它的类型定义为 basic_ostream。 不仅 basic_ostream 模板在任何情况下都无法进行前向声明,而且您根本无法可靠地前向声明它,因为允许库实现执行诸如添加自己的额外模板参数之类的事情(除了那些标准所要求的),当然,您的代码不会知道——这是不允许程序员为命名空间 std 中的事物编写自己的声明的规则的主要原因之一。"
我的问题:
我不明白用粗体标记的部分。
谢谢,
【问题讨论】:
-
您的问题标题和问题文本问的是两个不同的问题。
-
@Neil :好的,已尝试使它们保持一致。
标签: c++ stl compilation