The*_*der -1 c++ c++11 output c++14
#include<iostream>
using namespace std;
int main ()
{
int cin;
cin >> cin;
cout << "cin" << cin;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在这里看到了这个问题:http : //quiz.geeksforgeeks.org/c-misc-c-question-8/ 他们给出的输出是:cin + junk。
但是我不明白它是怎么来的?请解释。
这个问题中的“技巧”是
cin >> cin;
Run Code Online (Sandbox Code Playgroud)
我们习惯于从控制台cin >> x读取内容x,即使int cin;存在,也有可能您不会将其识别cin >> cin为移位操作。
如前所述,这是UB,这意味着您真的不能期待任何事情。但在没有鼻恶魔,这里是你能有什么样的期望从一个现代化的编译器:
cin逐cin位右移并丢弃答案(即cin未通过此操作修改。),否则编译器将cin >> cin完全消除,因为该行代码之后没有任何内容取决于它可能具有的细微副作用(例如设置处理器的零标志)tl; dr; 它输出一个随机数,因为它cin >> cin是无副作用的位移操作,而不是从控制台读取输入的指令。