C ++ Telltales第4部分:
这是我的C ++ Telltales系列的第四部分,我在其中分享了一些使用C ++的提示和技巧。 请随时在 这里查看 该系列的其他部分 !
C ++中的前向声明对于节省编译时间很有用,因为编译器不需要检查包含的标头中的翻译单元。 它还具有其他好处,例如防止名称空间污染,允许使用PImpl习惯用法 ,甚至在某些情况下甚至可以减小二进制大小。 C ++具有很酷的<iosfwd>标头,它为所有C ++流(例如std :: stringstream和std :: fstream)声明前向声明。
如果您有一个使用标准C ++中任何流类的类,则应在类声明中使用<iosfwd>标头,并且在实现中仅包括必要的标头。 请参阅以下代码段作为示例:
通常,应该尽可能多地使用前向声明。 将<sstream>改为头文件<iosfwd>会对编译器在文件预处理中必须创建多少行产生巨大影响。 可以用一个简单的命令来测试:
猫test_class.hpp | g ++ -E -xc ++ — | | 厕所
此命令输出test_class.hpp并将其通过管道传送到g ++,然后g ++ 输出经过预处理的源代码并将其发送到 wc 的标准输出以对行进行计数。 使用<iosfwd>时,预处理的文件为1229行,而对<sstream>的直接包含则为41952。而只有在类中使用一种类型的流时,此文件才可以。 真是节省。
这是我第一部分得到的同一张图片,是本文的封面照片(不幸的是,我仍然很懒。.):
如果您喜欢这个故事,请按下面的❤按钮(您知道可以鼓掌不止一次)。 也请随时分享这个故事!
关于我
我是Heikki Hellgren,是Elektrobit Automotive的软件专家和技术爱好者。 我的兴趣是软件构建,工具,自动测试以及AI和自动驾驶等所有新奇事物。 您可以在Medium和Twitter上关注我,并查看我的网站以获取更多信息。
From: https://hackernoon.com/forward-declarations-and-iosfwd-b6df7b3ed092