[英]C++ Why does this code compile?
我试图了解为什么以下代码会编译?
#include<iostream>
using namespace std;
int main ()
{
int cin;
cin >> cin;
cout << "cin" << cin;
return 0;
}
编译器如何区分以下语句:“ cin >> cin”?
如果运行该程序,您会注意到它从不等待输入。
它没有任何区别–您正在按自己的值右移int
。
(并且该值是不确定的,因此该程序是未定义的。)
如果增加编译器的警告级别,则应看到“警告:语句无效”或类似的内容。
要添加到molbdnilo的答案:
当您使用using namespace std;
的语句时using namespace std;
,您告诉编译器,对于当前作用域中的所有变量,请在当前作用域中循环查找标识符,如果不是,请在父作用域中查找 , 直到查找到达全局作用域并且仍然无法找到标识符为止,然后会尝试在您使用的名称空间中找到它。
声明int cin
,在主函数中称为cin
所有内容都是本地int cin
而不是std :: cin,因此所有代码cin
剩下cin
移位和cin
位数移位"cin"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.