在 C++ 中使用 Cin 关键字作为变量名
Using Cin Keyword as Variable name in C++
我遇到了以下问题:
#include<iostream>
using namespace std;
int main ()
{
int cin;
cin >> cin;
cout << "cin" << cin;
return 0;
}
题目要求我求程序的输出,给出的选项是:
(A) error in using cin keyword
(B) cin+junk value
(C) cin+input
(D) Runtime error
给出答案为(B)cin+junk值,但没有给出任何解释。有人可以解释一下这个程序中发生了什么吗?
是一个很好的实践:
尊重命名规则,不要“使用命名空间标准”
所以就这样做
std::cin >> cin;
会起作用
你遇到的问题太邪恶了,作者忘了附上正确答案。
局部cin
变量(shadowsstd::cin
由于using namespace std;
)未初始化,cin >> cin
是未初始化 cin
变量的二进制按位右移运算符。
此行为未由 C++ 标准定义。这意味着整个程序的行为是未定义。
所以,这只不过是一个技巧性问题 - 这些怪癖可能会出现,使用调试器可以快速识别它们。学习编码,而不是学习如何不编码。非常消极。
唯一不可能的答案是
(A) error in using cin keyword
他们可能正在寻找 (B)
,因为 int
cin
未初始化 - 但阅读它会使您的程序具有未定义的行为,因此无法保证 (B)
。
int cin; // uninitialized
// UB: shifting a uninitialized variable by an uninitialized variable:
cin >> cin;
// UB: reading an uninitialized variable:
cout << "cin" << cin;
由于程序有UB 甚至可能打印不出来cin
。事实上,你可能会得到一些完全出乎意料的东西,比如
(C) cin+input // yes, even that - it'd be strange, but UB is UB
(D) Runtime error // and this
这里发生了什么?
#include<iostream> // ok: declares std::cin
using namespace std; // imports cin in main namespce
int main ()
{
int cin; // HIDES std::cin behind a local integer variable
// this is the integer shift operator,ON AN UNITIALIZED VARIABLE : UB
cin >> cin;
cout << "cin" << cin; // (could) dump junk because cin has never be initialized
return 0;
}
在大多数系统上,它会转储垃圾,因为它使用了一个未初始化的变量。但是未定义的行为意味着按照标准绝对任何事情都可能发生...
The answer is given to be as (B) cin+junk value, but no explanation has been given.
答案是错误的:读取未初始化的变量是未定义的行为。
虽然您可能会得到“cin”+ 垃圾值,但这种情况可能会持续到您更改编译器、升级编译器、更改编译优化设置,您运行 你的应用程序,而其他一些特定的应用程序是 运行ning,或者(我猜)直到行星排列改变:-\
正确答案是“(可能)none 以上”或“取决于编译器实现”或“不可能正确预测”。
我遇到了以下问题:
#include<iostream>
using namespace std;
int main ()
{
int cin;
cin >> cin;
cout << "cin" << cin;
return 0;
}
题目要求我求程序的输出,给出的选项是:
(A) error in using cin keyword
(B) cin+junk value
(C) cin+input
(D) Runtime error
给出答案为(B)cin+junk值,但没有给出任何解释。有人可以解释一下这个程序中发生了什么吗?
是一个很好的实践:
尊重命名规则,不要“使用命名空间标准”
所以就这样做
std::cin >> cin;
会起作用
你遇到的问题太邪恶了,作者忘了附上正确答案。
局部cin
变量(shadowsstd::cin
由于using namespace std;
)未初始化,cin >> cin
是未初始化 cin
变量的二进制按位右移运算符。
此行为未由 C++ 标准定义。这意味着整个程序的行为是未定义。
所以,这只不过是一个技巧性问题 - 这些怪癖可能会出现,使用调试器可以快速识别它们。学习编码,而不是学习如何不编码。非常消极。
唯一不可能的答案是
(A) error in using cin keyword
他们可能正在寻找 (B)
,因为 int
cin
未初始化 - 但阅读它会使您的程序具有未定义的行为,因此无法保证 (B)
。
int cin; // uninitialized
// UB: shifting a uninitialized variable by an uninitialized variable:
cin >> cin;
// UB: reading an uninitialized variable:
cout << "cin" << cin;
由于程序有UB 甚至可能打印不出来cin
。事实上,你可能会得到一些完全出乎意料的东西,比如
(C) cin+input // yes, even that - it'd be strange, but UB is UB
(D) Runtime error // and this
这里发生了什么?
#include<iostream> // ok: declares std::cin
using namespace std; // imports cin in main namespce
int main ()
{
int cin; // HIDES std::cin behind a local integer variable
// this is the integer shift operator,ON AN UNITIALIZED VARIABLE : UB
cin >> cin;
cout << "cin" << cin; // (could) dump junk because cin has never be initialized
return 0;
}
在大多数系统上,它会转储垃圾,因为它使用了一个未初始化的变量。但是未定义的行为意味着按照标准绝对任何事情都可能发生...
The answer is given to be as (B) cin+junk value, but no explanation has been given.
答案是错误的:读取未初始化的变量是未定义的行为。
虽然您可能会得到“cin”+ 垃圾值,但这种情况可能会持续到您更改编译器、升级编译器、更改编译优化设置,您运行 你的应用程序,而其他一些特定的应用程序是 运行ning,或者(我猜)直到行星排列改变:-\
正确答案是“(可能)none 以上”或“取决于编译器实现”或“不可能正确预测”。