我只是瀏覽一個C++代碼,我注意到了一些東西。在源文件中main.cpp調用沒有命名空間的方法
std::cout << converter();
然後我查找了轉換器的定義。沒有名稱空間和類名稱。然後我在tool.cpp中看到
using namespace Ccon::converter;
該定義位於Ccon.cpp文件中。
爲什麼main.cpp可以調用converter()
?
請指教。
感謝
我只是瀏覽一個C++代碼,我注意到了一些東西。在源文件中main.cpp調用沒有命名空間的方法
std::cout << converter();
然後我查找了轉換器的定義。沒有名稱空間和類名稱。然後我在tool.cpp中看到
using namespace Ccon::converter;
該定義位於Ccon.cpp文件中。
爲什麼main.cpp可以調用converter()
?
請指教。
感謝
請參閱此鏈接參數相關的名稱查找:http://en.wikipedia.org/wiki/Argument-dependent_name_lookup
當編譯器是無法找到一個不合格converter()
它會尋找可用的命名空間,如果使用它們的名稱和簽名火柴。
在這種情況下,main.cpp包含了我設想的Ccon.h頭文件,它定義了這個名稱空間,因此它查找帶有void參數的converter()
。
這是否適用於此?轉換器沒有參數? – 2013-03-02 08:35:13
你解釋依賴於參數的查找的方式,它與參數無關。事實上,如果這是真的,命名空間不會有任何意義。 – jogojapan 2013-03-02 08:43:45
我提到了函數簽名中的簽名,函數的名字,加上輸入參數的類型和輸出類型。沒有任何論據會是簽名。是的,jogojapan,如果你閱讀http://en.wikipedia.org/wiki/Argument-dependent_name_lookup#Criticism,它談到命名空間變得不太嚴格,因爲ADL,這是對ADL的批評 – ruben2020 2013-03-02 10:53:48
搜索「依賴於參數的查找」。 – jrok 2013-03-02 08:13:10
閱讀一本關於C++的好書是我的建議 – 2013-03-02 08:13:41
在互聯網上搜索'using namespace C++'是我的建議。 – antonijn 2013-03-02 08:19:27