2013-03-02 71 views
1

我只是瀏覽一個C++代碼,我注意到了一些東西。在源文件中main.cpp調用沒有命名空間的方法

std::cout << converter(); 

然後我查找了轉換器的定義。沒有名稱空間和類名稱。然後我在tool.cpp中看到

using namespace Ccon::converter; 

該定義位於Ccon.cpp文件中。

爲什麼main.cpp可以調用converter()

請指教。

感謝

+1

搜索「依賴於參數的查找」。 – jrok 2013-03-02 08:13:10

+2

閱讀一本關於C++的好書是我的建議 – 2013-03-02 08:13:41

+0

在互聯網上搜索'using namespace C++'是我的建議。 – antonijn 2013-03-02 08:19:27

回答

-2

請參閱此鏈接參數相關的名稱查找:http://en.wikipedia.org/wiki/Argument-dependent_name_lookup

當編譯器是無法找到一個不合格converter()它會尋找可用的命名空間,如果使用它們的名稱和簽名火柴。

在這種情況下,main.cpp包含了我設想的Ccon.h頭文件,它定義了這個名稱空間,因此它查找帶有void參數的converter()

+1

這是否適用於此?轉換器沒有參數? – 2013-03-02 08:35:13

+0

你解釋依賴於參數的查找的方式,它與參數無關。事實上,如果這是真的,命名空間不會有任何意義。 – jogojapan 2013-03-02 08:43:45

+0

我提到了函數簽名中的簽名,函數的名字,加上輸入參數的類型和輸出類型。沒有任何論據會是簽名。是的,jogojapan,如果你閱讀http://en.wikipedia.org/wiki/Argument-dependent_name_lookup#Criticism,它談到命名空間變得不太嚴格,因爲ADL,這是對ADL的批評 – ruben2020 2013-03-02 10:53:48