我遇到过这个问题而无法理解它为什么不要求输入。 代码的输出是cin0。 请解释原因。
#include<iostream>
using namespace std;
int main ()
{
int cin;
cin >> cin;
cout << "cin" << cin;
return 0;
}
答案 0 :(得分:2)
阴影。
int cin;
cin&gt;&gt; CIN;
第二行中的cin都指的是int,而不是你习惯的类。您只需使用名为cin的变量计算a>>a
(即大致相当于a / 2^a
)。
选择其他变量名称。
答案 1 :(得分:2)
让我们逐行看一下。
int cin;
此行声明一个名为cin
的局部变量。从现在开始,无论何时编写cin
,,编译器始终认为您的意思是本地变量,而不是输入流对象std::cin
。
cin >> cin;
该行读取局部变量并执行位移。当>>
运算符的两边都是整数时,它不再意味着输入;这意味着现在有点转移。
但这不是重点。
重点是,局部变量cin
未初始化并且已被读取。行为未定义。程序中的一个未定义行为可能导致整个程序的行为未定义。
另请注意,如果我们忽略未定义行为的问题,则位移的结果不会分配给任何内容,因此会丢失。
cout << "cin" << cin;
在没有初始化的情况下再次读取局部变量cin
。这是另一行未定义的行为。
由于未定义的行为,不再有意义地说出它为什么输出cin0
。但是我们可以合理地想象局部变量cin
的内存恰好包含零