当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《这个C++程序的输出是什么?》经验,为你挑选了1个好方法。

这个问题中的“技巧”是

cin >> cin;

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

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

    该应用程序选择一个寄存器,并将其称为“ cin”。

    它要么不覆盖寄存器最后一次使用后仍然具有的值,要么-对于调试版本-将一些幻数(由编译器作者选择)存储到该寄存器中。

    然后,它要么将值cincin位右移并丢弃答案(即cin未通过此操作修改。),否则编译器将cin >> cin完全消除,因为该行代码之后没有任何内容取决于它可能具有的细微副作用(例如设置处理器的零标志)

    然后,应用程序将字符串“ cin”和寄存器中的值写入控制台。

    该应用程序干净地结束,将值0返回给其调用方(可能是OS)。

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



1> Gavin Lock..:

这个问题中的“技巧”是

cin >> cin;

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

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

    该应用程序选择一个寄存器,并将其称为“ cin”。

    它要么不覆盖寄存器最后一次使用后仍然具有的值,要么-对于调试版本-将一些幻数(由编译器作者选择)存储到该寄存器中。

    然后,它要么将值cincin位右移并丢弃答案(即cin未通过此操作修改。),否则编译器将cin >> cin完全消除,因为该行代码之后没有任何内容取决于它可能具有的细微副作用(例如设置处理器的零标志)

    然后,应用程序将字符串“ cin”和寄存器中的值写入控制台。

    该应用程序干净地结束,将值0返回给其调用方(可能是OS)。

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

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有