繁体   English   中英

C ++为什么要编译此代码?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM