2012-04-28 27 views
0

例如Visual Studio中包括<utility>即使你沒有明確鍵入#include <utility>有沒有預處理器或什麼東西來控制視覺工作室包含什麼標題?

是否有一個預處理指令或某些選項只包括什麼是明確由程序設計師告訴?

只是一個假設的例子:

#include <vector> 

int main() 
{ 
    std::vector<int> x; 
    std::move(x); // Did I ask for <utility> ? No I didn't 
    return 0; 
} 
+0

它不在預編譯頭文件中嗎?即#包括「stdafx.h」或類似的? – 2012-04-28 00:58:57

+0

Visual Studio不會自動包含任何內容。它必須來自您包含的另一個標題。 – Cameron 2012-04-28 00:59:25

+0

@Preet,不,它不是:)我已經包括** **和** **但** std :: sort **和** std :: make_pair **工作得很好,即使我沒有不要求** **和** **這是disapointing和違反只包括需要的規則。 – codekiddy 2012-04-28 01:05:23

回答

4

Visual studio不包括<utility>,除非它是其他包含的std標頭所必需的。

在VS10中,只包括<vector>直接和間接地拉另外74個頭文件。的線索<utility>是:

<vector>包括<memory>包括<xmemory>包括<xutility>包括<utility>

+2

即使除了這個迂迴路線,C++ 11中的'vector'都有一個功能,這個功能明顯要用'std :: move'或者它的一些實現特定的克隆以不同的名字來實現。例如,'vector :: reserve()'將在''中使用'move'的多重參數重載,這很可能會使用''中的單參數'move'。C++標準*可能會禁止''將'move'放入命名空間'std'中,這樣做迫使實現使用'__move'而不是其他任何東西。但事實並非如此。 – 2012-04-28 01:55:30

3

顯然,你的編譯器,當你包括vector,該頭還包括一些包括utility

Visual Studio不會自動包含任何內容,所以這是您描述內容的唯一解釋。

+0

我真的很好奇,如果向量類**它自己真的需要從實用程序頭的東西? – codekiddy 2012-04-28 01:14:25

+0

在不同的編譯器/ IDE上支持std頭文件包含的行爲是否會受到支持?還是應該輸入#包含manulay以確保可移植性? Thaks。 – codekiddy 2012-04-28 01:21:14

+0

始終包含您需要的所有標題,詳見文檔。 – 2012-04-28 01:22:16

1

當您包含<map>時,它在內部使用std::pair,因此包括<utility>。我猜<vector>也使用<utility>中的東西,如果那是你唯一的#include

相關問題