我的快读有 UB?
  • 板块学术版
  • 楼主yzy1Ẽd<ßDream
  • 当前回复10
  • 已保存回复10
  • 发布时间2021/6/22 09:34
  • 上次更新2023/11/4 21:37:51
查看原帖
我的快读有 UB?
207996
yzy1Ẽd<ßDream楼主2021/6/22 09:34

利用重载运算符写了个能“连续调用”的快读,但是这份代码在 G++>=7 上能正确运行;在较低版本的 G++(如 G++4)会得到错误的结果,而且只读入一个 nn 就不读了。求各位大佬看看是什么原因。

#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
2021/6/22 09:34
加载中...