我试图理解为什么以下代码会编译?
#include<iostream>
using namespace std;
int main ()
{
int cin;
cin >> cin;
cout << "cin" << cin;
return 0;
}
编译器如何在声明中区分:&#34; cin&gt;&gt; CIN&#34;
答案 0 :(得分:4)
如果你运行该程序,你会发现它永远不会等待输入。
它没有区分任何东西 - 你正确地将int
移动到它自己的值。
(并且该值是不确定的,因此程序未定义。)
如果你提高编译器的警告级别,你应该看到&#34;警告:语句没有效果&#34;或类似的东西。
答案 1 :(得分:0)
再补充一下molbdnilo的答案:
当您使用语句using namespace std;
时,您告诉编译器对于当前作用域中的所有变量,在当前作用域中循环标识符,如果不是,请在父作用域中查找在查找到达全局范围但仍无法找到标识符之前,它会尝试在您正在使用的命名空间中找到它。
在声明int cin
之后,main函数中名为cin
的所有东西都是本地int cin
而不是std :: cin,所以你的所有代码都只剩下转移cin
并将"cin"
转移cin
位数。