我遇到过这个问题,不明白为什么不要求输入。代码的输出是cin0。请解释一下为什么。
#include<iostream>
using namespace std;
int main ()
{
int cin;
cin >> cin;
cout << "cin" << cin;
return 0;
}
让我们一行一行地看。
int cin;
这一行声明了一个名为cin
的局部变量。从现在开始,无论何时你写cin
, ,编译器总是认为你是指这个局部变量,而不是输入流对象std::cin
。
cin >> cin;
这一行读取本地变量并执行位移位。当>>
算子两边均为整数时,不再表示输入;这意味着现在有点移位了。
但这不是重点。
关键是,局部变量cin
是未初始化的,它被读取。行为是未定义的。程序中的一个未定义行为会使整个程序的行为未定义。
还需要注意的是,如果我们忽略未定义行为的问题,那么位移位的结果不会赋值给任何对象,因此会丢失。
cout << "cin" << cin;
在没有初始化的情况下再次读取局部变量cin
。这是另一行未定义的行为。
由于未定义的行为,不再有意义说明为什么它输出cin0
但是我们可以合理地想象局部变量cin
的内存恰好包含零
阴影。
int cin;Cin>> Cin;
第二行中的两个cin都指向int类型,而不是您所习惯的类。你在计算a>>a
(即。大致相当于a / 2^a
),只是使用了一个名为cin的变量。