我的cpp项目没有征求意见



我遇到过这个问题,不明白为什么不要求输入。代码的输出是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的变量。

最新更新