我对C ++ istream分配感到好奇

在原始代码之后有两个代码段。

原始代码是:

int i;
int w[10];

代码段#1是:

cin >> i >> w[i];

代码段#2是:

cin >> i;
cin >> w[i];

标准输入为:

3 10

这些代码执行相同的操作(因此,我认为)。

But In my PC(Win10 64bit, gcc version : g++ 6.3.0), code #1 occurs segmentation fault. But other environment(like https://ideone.com) can execute code #1.

因此,出现了两个小问题:

  1. istream分配的标准是什么?应该从当前行还是下一行读取分配的变量?
  2. 如果编译器同时支持两种语言,那么哪一种对读者来说是“好代码”?