我正在研究命名空间主题,发现当我们编译以下代码时,编译器会抱怨:
据我所知,
在这两种情况下,
[错误] 对 'cout' 的引用不明确
#include <iostream>
void cout()
{
std::cout << "In cout function\n";
}
int main()
{
using namespace std;
cout << "Hello, world!\n";
return 0;
}
但是,如果我们将using namespace std
替换为using std::cout
,程序就可以成功运行并产生预期的输出。这是如何实现的呢?
#include <iostream>
int cout()
{
std::cout << "In cout function\n";
}
int main()
{
using std::cout; //REPLACED
cout << "Hello, world!\n";
return 0;
}
据我所知,
using std::cout
和using namespace std
之间唯一的区别是:using std::cout
只从std命名空间中导入cout
,而using namespace std
则会导入std中的所有变量。在这两种情况下,
cout()
函数和std::cout
变量都可以在主函数中访问。那么为什么using std::cout
可以解决问题,而using namespace std
却不能呢?