我对此代码有一些疑问:
#include <iostream>
using namespace std;
int main() {
int i;
int w[10];
cin >> i >> w[i];
cout << i << ' ' << w[i];
return 0;
}
标准输入是:
3 10
在我的电脑(Win10 64bit,gcc 版本:g++ 6.3.0)中,出现段错误。
但其他环境(如 https://ideone.com/i5Vd7o )可以执行它。
当我编辑此部分时它工作正常:
cin >> i >> w[i];
对此:
cin >> i;
cin >> w[i];
所以出现了2个小问题:
最佳答案
在 C++17 之前,您会遇到未定义的行为。执行时
int i;
int w[10];
cin >> i >> w[i];
i
尚未初始化,读取其值未定义。读取 i
的行和 w[i]
尝试阅读 i
找出 w[i]
的位置在将值放入 i
之前由于 C++ 的 order of evaluation 来自输入流.你的第二个陈述有效,因为这里
i
从标准输入中读取,随后用于计算 w[i]
在单独的声明中。在 C++17 中,这种行为发生了变化,
std::cin >> i >> w[i]
现在是明确定义的,因为每个 >>
的左侧在右边之前计算,包括它的计算。这意味着在左关联链中 >>
调用,std::cin >> i
在
之前完全执行w[i]` 被计算出来。
关于c++ - 我对 c++ istream 赋值很好奇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61865254/