头文件中的std :: cout是错误的做法吗?

时间:2019-01-11 18:56:24

标签: c++ standards

这可能是一个重复的问题,但是我所有的搜索结果都在谈论不要将using放在头文件中,这不是我的问题。我已阅读了此书,并了解了为什么不应该将using放在头文件中。

我是C ++的新手,正在尝试确保自己正在学习/使用最佳实践。我知道头文件是用于定义类,结构之类的,并且永远不要“做”任何事情。这包括std::cout吗?是否考虑做某事?我的意思是,可以打印头文件中的输出,还是应该将数据返回到我的* .cpp文件中并从那里进行输出?还是真的不重要吗?

3 个答案:

答案 0 :(得分:4)

头文件中的doing东西原则上没有错。实际上,如今,仅标头库在C ++中非常流行。在某些情况下(例如模板)doing仅是头文件中的内容。

在头文件和.cpp文件之间拆分定义的技巧通常是一种判断。通常,当您在头文件中定义函数时,您可能希望获得更好的性能(因为更容易实现内联),但是您可能最终会获得更大的代码库(取决于链接器的行为),并且可能会增加您的编译时间。

我不建议寻求最佳实践,而是全心全意地建议您了解那里的机制,并自己做出有意识的选择。

答案 1 :(得分:1)

恕我直言...

在库中的任何文件中使用std::cout是设计不良的征兆。如果需要输出某些内容,请为客户端代码提供接口以传递ostream或类似ostream的对象,该对象支持向其中插入数据。

在特定于应用程序的文件(无论是头文件还是.cpp文件)中使用std::cout完全可以。

答案 2 :(得分:1)

  

标头文件中的std :: cout是错误的做法吗?

不一定。例如,您可能具有将字符序列输出到流中的功能。让函数的客户端选择要使用的流将很有用,因此该函数接受该流作为参数。函数具有默认流传输到标准输出流的行为可能很有意义。因此,您可能在标头中有一个函数声明,例如:

void stream_fancy_stuffs(std::ostream& output_stream = std::cout);