xyz*_*xyz 0 c++ stl compilation
摘自"Exceptional C++":
"在过去,你可以在这种情况下用"class ostream"替换"#include",因为ostream曾经是一个类而且它不在命名空间std中.唉,不再.写"class ostream; "有两个原因是非法的:
ostream现在位于命名空间std中,并且不允许程序员声明存在于命名空间std中的任何内容.
ostream现在是模板的typedef; 具体来说,它的typedef为basic_ostream.在任何情况下,basic_ostream模板不仅在前向声明时都很麻烦,而且你根本无法可靠地前向声明它,因为允许库实现添加自己的额外模板参数(超出了标准),当然,你的代码不会知道程序员不允许在命名空间std中为事物编写自己的声明的规则的主要原因之一."
我的问题:
我不明白用粗体标出的部分.
谢谢,
粗体部分只是说你不能像这样转发声明ostream:
class ostream;
Run Code Online (Sandbox Code Playgroud)
如果您想要ostream的前向声明,请改为包含<iosfwd>.(或者查看实现的内容).