利用重载运算符写了个能“连续调用”的快读,但是这份代码在 G++>=7 上能正确运行;在较低版本的 G++(如 G++4)会得到错误的结果,而且只读入一个 n 就不读了。求各位大佬看看是什么原因。
#include<bits/stdc++.h>
struct Reader{
Reader&operator()(int&x){
x=0;
char c=getchar();
while(!isdigit(c))c=getchar();
while(isdigit(c))x=x*10+c-'0',c=getchar();
return*this;
}
Reader&operator()(int*x,int n){
for(int i=1;i<=n;++i)operator()(x[i]);
return*this;
}
}r;
int n, a[N];
signed main(){
r(n)(a,n);
cerr<<"n = "<<n<<'\n';
re(i,n)cerr<<"a["<<i<<"] = " << a[i] <<'\n';
}
输入
5
1 2 3 4 5
正确输出(G++ >= 7)
n = 5
a[1] = 1
a[2] = 2
a[3] = 3
a[4] = 4
a[5] = 5
错误输出(G++ < 7)
n = 5
a[1] = 0
a[2] = 0
a[3] = 0
a[4] = 0
a[5] = 0