这个C ++程序的输出是什么?

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

但是我不明白它是怎么来的?请解释。

Gav*_*ock 5

这个问题中的“技巧”是

cin >> cin;
Run Code Online (Sandbox Code Playgroud)

我们习惯于从控制台cin >> x读取内容x,即使int cin;存在,也有可能您不会将其识别cin >> cin为移位操作。

如前所述,这是UB,这意味着您真的不能期待任何事情。但在没有鼻恶魔,这里是你能有什么样的期望从一个现代化的编译器:

  1. 该应用程序选择一个寄存器,并将其称为“ cin”。
  2. 它要么不覆盖寄存器最后一次使用后仍然具有的值,要么-对于调试版本-将一些幻数(由编译器作者选择)存储到该寄存器中。
  3. 然后,它要么将值cincin位右移并丢弃答案(即cin未通过此操作修改。),否则编译器将cin >> cin完全消除,因为该行代码之后没有任何内容取决于它可能具有的细微副作用(例如设置处理器的零标志)
  4. 然后,应用程序将字符串“ cin”和寄存器中的值写入控制台。
  5. 该应用程序干净地结束,将值0返回给其调用方(可能是OS)。

tl; dr; 它输出一个随机数,因为它cin >> cin是无副作用的位移操作,而不是从控制台读取输入的指令。