gpt4 book ai didi

c++ - 为什么不使用 std::getline 就可以调用 getline?

转载 作者:可可西里 更新时间:2023-11-01 16:26:05 26 4
gpt4 key购买 nike

我正在阅读 C++ 入门书并尝试所有代码示例。我对这个很感兴趣:

#include <iostream>
#include <string>

using std::string;
using std::cin;
using std::cout;
using std::endl;

int main()
{
string line;
while (getline(cin,line))
cout << line << endl;
return 0;
}

在编译这段代码之前我猜编译会失败,因为我没有使用

while (std::getline(cin,line))

为什么getline在全局命名空间中?据我了解,只有在我使用

namespace std;

using std::getline;

我在 Linux Mint Debian Edition 上使用 g++ 4.8.2 版。

最佳答案

这是 argument dependent lookup .

非限定查找(当您调用 getline() 而不是 std::getline() 时您正在做的事情)将首先尝试对获取行。它什么也找不到——在该名称的范围内没有变量、函数、类等。

然后我们将查看每个参数的“关联 namespace ”。在这种情况下,参数是 cinline,其类型为 std::istreamstd::string ,因此它们关联的命名空间都是 std。然后,我们在命名空间 std 中重新查找 getline 并找到 std::getline

还有更多详细信息,我鼓励您阅读我引用的引用资料。此过程也称为 Koenig 查找。

关于c++ - 为什么不使用 std::getline 就可以调用 getline?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31598707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com