C++ getline()不需要命名空间声明

Pet*_*ter 6 c++ scope

为什么getline()来自本地范围内的头字符串并且可以使用:

#include <iostream>
#include <string>

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

这适用于gcc.但为什么?它在头字符串中定义,它应该要求我使用std :: getline()而不是getline().

chr*_*ris 8

您正在体验Argument Dependent Lookup(ADL,也称为Koenig Lookup).由于一个或多个参数是在std命名空间中定义的类型,因此std除了搜索其他任何地方外,它还会在命名空间中搜索该函数.我指向Stephan T. Lavavej的视频,以了解更多关于它和名称查询的信息.