当我们声明 cin 为 int 并从 cin 中获取输入并在 cout 中打印 cin 时会发生什么?

What will happen when we declare cin as int and take input from cin with print cin in cout?

本文关键字:cin 打印 cout 什么 输入 声明 我们 int 并从 获取      更新时间:2023-10-16
#include <iostream>
using namespace std;
int main() {
int cin;
cin >> cin;
cout << "cin is : " << cin;
}

在此代码中,它在不同的编译器中获得不同的输出,并且找不到适当的解决方案。

有两件事你可能不明白:作用域初始化

  1. 在下面的代码中,全局变量v被局部变量隐藏vmain中声明。main中的所有操作都在mainv上执行。cin也是如此.在main中声明的cin与在命名空间中声明cinstd不同。因此,cin >> cin;具有不同的含义。您可能期望与std::cin >> cin;相同的行为。

    double v;
    int main()
    {
    int v;
    }
    
  2. C++ 允许未初始化的变量。当你写入时int cin;内存空间是为cin分配的,但没有写入任何内容(变量不会自动初始化)。让变量保持未初始化可能是有意的,也可能不是故意的。编译器可能设置为对未初始化的变量发出警告和/或在运行时进行检查。如果在调试配置中编译,则变量可能会自动设置为零,具体取决于编译器,但您不应依赖此变量,因为最终版本将发布。

您的问题"垃圾值,错误,分段错误,未打印任何内容">的答案是垃圾值(这是面试问题吗?

  • cin是一个局部整数变量,并且
  • cin >> cin不同于std::cin >> cin,也不同于cin >>= cin

您的代码调用未定义的行为。(查一下这个术语,这是一个重要的概念,使C++成为一种不可靠的编程语言。

在行int cin中,定义一个变量,但不初始化它。

一旦您从未初始化的cin变量中读取,就会发生未定义的行为。

下一个未定义的行为发生取决于cin的值。右移运算符是一种算术运算。如果其右侧不在 0 和左侧操作数的位大小之间,则行为未定义。

不能为变量名称声明关键字 name。 CIN 和 COUT 是 C++ 中的关键字。请为c ++程序中使用的变量名称使用不同的名称。