2012-04-05 31 views
3

我搜索的std ::地圖運行有序的實施,並發現此解決方案: STL std::map dynamic ordering的std ::地圖構造函數的用法奇怪

很清楚我,但我不明白,怎麼了可以在std :: map的構造函數中使用OrderingType。 std :: map有一個構造函數,它獲取一個比較對象作爲參數。因此,它是從我的角度來看正常使用這樣的代碼:

int main() 
{ 
    Ordering<int> test_ordering(ASCENDING); 
    CUSTOMMAP map1(test_ordering); 

    return 0; 
} 

但是代碼上面提到的話題還會編譯:

int main() 
{ 
    CUSTOMMAP map1(ASCENDING); 
    //... 
    return 0; 
} 

我不明白,爲什麼它的工作原理:一個構造器std :: map不能獲得OrderingType枚舉的參數而不是Ordering類對象本身。

+0

我在這張圖片的任何地方都看不到'std :: map'。 – 2012-04-05 21:08:33

+0

我剛剛從上面提到的主題中抽取了一段代碼。也許,我應該完全引用它。我不知道,如果它只比留下鏈接更好。 – 2012-04-05 21:59:11

+0

好的,我現在看到它。 – 2012-04-05 22:07:29

回答

9

如果把你的枚舉未聲明爲explicit,那麼它被認爲是一個「轉換構造」,可以自動插入時,編譯器需要從您的枚舉類型轉換爲Ordering<int>類型上Ordering<int>構造。所以編譯器有效地採取這樣的:

CUSTOMMAP map1(ASCENDING); 

並將其轉變成這樣:

CUSTOMMAP map1(Ordering<int>(ASCENDING)); 

這就是所謂的隱式轉換

+0

感謝您的回覆。 – 2012-04-05 21:59:43