2013-04-13 55 views
6

爲什麼在局部範圍內函數getline()從頭部,可用於:C++函數getline()不需要命名空間聲明

#include <iostream> 
#include <string> 

int main() { 
    std::string str; 
    getline(std::cin, str); 
    std::cout << str << "\n"; 
    return 0; 
} 

與海灣合作委員會的工作。但爲什麼?它在標頭字符串中定義,它應該要求我使用std :: getline()而不是getline()

+0

在你說它瘋了之前注意一點:'operator <<'在'std'中定義。你說'std :: cout <<「hi」;'沒有明確引用'std :: operator <<'。這可能會更好。 – chris

+0

謝謝!將閱讀有關參數相關查詢! – Peter

回答

8

您正在體驗參數相關查找(ADL,也稱爲Koenig Lookup)。由於一個或多個參數是在std名稱空間中定義的類型,因此它除了搜索其他任何地方之外,還會搜索std名稱空間中的函數。我指向Stephan T. Lavavej's video以瞭解更多關於它和名稱查找的一般信息。