C ++为什么这段代码会编译?

时间:2017-02-05 09:25:14

标签: c++

我试图理解为什么以下代码会编译?

#include<iostream>
using namespace std;
int main ()
{
   int cin;
   cin >> cin;
   cout << "cin" << cin;
   return 0;
}

编译器如何在声明中区分:&#34; cin&gt;&gt; CIN&#34;

2 个答案:

答案 0 :(得分:4)

如果你运行该程序,你会发现它永远不会等待输入。

它没有区分任何东西 - 你正确地将int移动到它自己的值。
(并且该值是不确定的,因此程序未定义。)

如果你提高编译器的警告级别,你应该看到&#34;警告:语句没有效果&#34;或类似的东西。

答案 1 :(得分:0)

再补充一下molbdnilo的答案:

当您使用语句using namespace std;时,您告诉编译器对于当前作用域中的所有变量,在当前作用域中循环标识符,如果不是,请在父作用域中查找在查找到达全局范围但仍无法找到标识符之前,它会尝试在您正在使用的命名空间中找到它。

在声明int cin之后,main函数中名为cin的所有东西都是本地int cin而不是std :: cin,所以你的所有代码都只剩下转移cin并将"cin"转移cin位数。