【问题标题】:C++ getline() doesn't require namespace declarationC++ getline() 不需要命名空间声明
【发布时间】:2013-04-13 18:45:57
【问题描述】:

为什么 getline() from header string 在本地范围内并且可以使用:

#include <iostream>
#include <string>

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

这适用于 gcc。但为什么?它在标题 string 中定义,这应该要求我使用 std::getline() 而不是 getline()

【问题讨论】:

  • 在你说这很疯狂之前的旁注:operator&lt;&lt;std 中定义。你说std::cout &lt;&lt; "hi"; 没有明确引用std::operator&lt;&lt;。这可能会更好。
  • 谢谢!将阅读有关参数依赖查找的内容!

标签: c++ scope


【解决方案1】:

您正在体验 Argument Dependent Lookup (ADL,也称为 Koenig Lookup)。由于一个或多个参数是在 std 命名空间中定义的类型,因此它会搜索 std 命名空间中的函数以及它要搜索的任何其他位置。我将您指向Stephan T. Lavavej's video 以了解有关它的更多信息并进行一般名称查找。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-14
    • 2011-06-14
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多