我目前正在学习C++,我认为我已经理解了关于包含头文件的大部分知识...来自其他编程语言,在那里这根本不是必需的,我经常有一种感觉'这是错的'或者应该有'更简单的方法':
我发现每个类都要包括(例如)"vector"非常烦人。有更好的方法吗?
我有很多核心功能(也在它自己的命名空间中)有很多类,很少改变。虽然我并不需要每个类中的所有功能,但只需有一个单一的头文件,包含它并完成它会非常好…最好的方法是什么?
在预编译头文件中包含头文件是否是不好的实践?如果是的话,为什么?
我目前正在学习C++,我认为我已经理解了关于包含头文件的大部分知识...来自其他编程语言,在那里这根本不是必需的,我经常有一种感觉'这是错的'或者应该有'更简单的方法':
我发现每个类都要包括(例如)"vector"非常烦人。有更好的方法吗?
我有很多核心功能(也在它自己的命名空间中)有很多类,很少改变。虽然我并不需要每个类中的所有功能,但只需有一个单一的头文件,包含它并完成它会非常好…最好的方法是什么?
在预编译头文件中包含头文件是否是不好的实践?如果是的话,为什么?
#include
并将所需的内容包含进去是“错误”的,这种感觉可能来自于您从其他语言中获得的偏见,在这些语言中,这不是必要的。#include
。没有什么会被自动#include
。#include
了在整个项目中全局使用的所有底层内容。您可以编写此类标题,并在任何需要它的文件中#include
该标题,而不是包含几十个独立的文件。1.我发现每次想使用向量时都要包含(例如)
<vector>
,这让我非常烦恼。有没有更好的方法?
想象一下其他人使用你的代码时(其中可能包括你未来的自己),由于缺少<vector>
头文件而导致编译错误是多么令人恼火。只需写一次,便可多次使用。
你可以通过让IDE自动将其包含为预编译头文件来加速操作。但是出于正确性和可移植性的考虑,你不应该依赖它,始终让每个头文件都能够独立编译。参见Alexandrescu & Sutter's编码规范中的第23项。像CMake这样的构建系统甚至有测试此功能的宏。2.我有很多核心功能(也在其单独的命名空间中)的代码,其中有相当多的类不经常更改。虽然我不需要在每个类中都使用所有功能,但只需有一个单一的头文件,包含它并完成它将会非常好...最好的方法是什么?
你可以这样做,但最好让IDE来完成以获得更好的可移植性。并且那些头文件最好是稳定的(例如标准库或Boost),但永远不要包含你自己项目的头文件。3.在预编译头文件中包含头文件是否是一种不好的实践?如果是,为什么?