mlo*_*kot 83
lur*_*her 21
主要问题是杂乱无章.这些是杂乱表现出来的三个主要方面:
视觉污染; 当你试图找出你需要的其他包括.
逻辑污染; 它更容易发生函数冲突,编译时间更长(对于一些包含它可能非常小,但如果它成为不清理不需要的包含的"策略",它可能会成为一个重大障碍).
依赖性不透明; 因为要分析的标头越多,就越难确定代码中的依赖循环.当您的代码库增长到超出业余爱好者级别的任何重要级别时,了解代码中的依赖项是至关重要的.
小智 16
一般来说,是的,它确实会导致一些问题.从逻辑上讲,如果你不需要它,那就不要包含它.
任何在标题中声明为外部并在源文件中定义的单例都将包含在您的程序中.这显然增加了内存使用量,并且可能导致一个人更频繁地访问他们的页面文件而导致性能开销(现在不是很大的问题,因为单例通常是中小型的,因为我认识的大多数人都有6+ GB的RAM).
编译时间增加,对于经常编译的大型商业项目,这可能导致资金损失.它可能只会增加你的总时间几秒钟,但是乘以数百个编译或者你可能需要进行测试和调试,你会浪费大量的时间,从而转化为利润的损失.
您拥有的标头越多,您在程序或其他标头中定义的宏与预先发生冲突的可能性就越高.这可以通过正确使用命名空间来避免,但它仍然是一个很难找到的麻烦.再次,失去了利润.
有助于代码膨胀(更长的文件,因此更多的阅读),并可以主要增加您在IDE的自动完成工具中找到的结果的数量(有些人虔诚地反对这些工具,但他们确实提高了生产力).
您可能会意外地将其他外部库链接到您的程序中,甚至不知道它.
这样做可能会无意中造成世界末日.
我认为标题都可以被认为是"真诚的",也就是说,并不是为了破坏你的代码而精确编写的.
它通常会减慢编译速度(预编译的头文件会减轻这一点)
它意味着没有真正存在的依赖(这是语义错误,而不是实际错误)
宏将污染您的代码(通过使用类似命名空间的名称的宏的前缀来缓解,如在BOOST_FOREACH而不是FOREACH中)
标题可能意味着指向另一个库的链接.在某些情况下,未使用的头可能会要求链接器将您的代码与外部库链接(请参阅MSCV的#pragma comment(lib,"")).我相信一个好的链接器如果不使用它就不会保留库的引用(IIRC,MSVC的链接器不会保留未使用的库的引用).
删除的标题是一个较少的意外错误来源.如果你不信任标题(一些编码器比其他编码器好...),那么删除它会消除风险(你不会喜欢包含一个标题改变它之后的所有内容的结构对齐:生成的错误是......照亮......)
标头的static变量声明会污染您的代码.每个静态变量声明都将导致在已编译的源中声明一个全局变量.
C符号名称将污染您的代码.标题中的声明会污染您的全球或结构的命名空间(更可能的是,两者的结构通常是的typedef版带给他们的类型分为全局命名空间).这可以通过为其符号添加某种"命名空间名称"的库来缓解,就像SDL_CreateMutexSDL一样.
非命名空间的 C++符号名称将污染您的代码.出于同样的原因.标题错误地使用该using namespace语句也是如此.现在,正确的C++代码将命名其符号.是的,这意味着您通常不应该信任在全局命名空间中声明其符号的C++标头...
| 归档时间: |
|
| 查看次数: |
5387 次 |
| 最近记录: |