有一本C++書籍說我們需要在兩個不同的文件中包含兩個頭文件,一個帶有一個類,另一個帶有使用前一個文件中的類的main()。C++ #include headers
這裏的報價:
因爲我們SALES_DATA類有一個字符串成員,Sales_data.h必須#字符串頭。使用Sales_data的程序也需要包含字符串標題。
但有些東西我不明白。如果我們在主文件中包含「Sales_data.h」,#include <(string)>已經在這個頭文件中,所以不需要在我們的主文件中包含#include <(string)>。
據我所知,當我們在一個主文件中包含一個文件時,C++只會複製並粘貼文件頭部調用的整個文件。因此添加第二個#include <(string)>是不必要的。我正在談論當頭部沒有#ifndef或#define時會發生什麼。
我自己做了測試,我只需要在一個文件中編寫#include <(字符串)>並且它工作。除了頭文件中的#pragma一次之外,我在任何一個文件中都沒有#指令。
您通常不想依賴哪個標題包含哪些其他標題。如果你的模塊使用'std :: string',則#include',即使你的模塊包含的其他頭文件也包含字符串。由於這個原因,標題包括警衛。 –
儘管有可能你可以穿過街道而不是兩邊看,也沒有什麼可怕的事情發生,但你可以說「在你穿過街道之前你必須兩面看」是完全合理的。如果'Sales_data.h'稍後更改爲不包含'string',會發生什麼情況? –
在技術上它不是必需的,但沒有傷害 – pm100