社区讨论

求问关于 -O2

学术版参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mlnbe82i
此快照首次捕获于
2026/02/15 13:38
4 天前
此快照最后确认于
2026/02/15 22:04
4 天前
查看原帖
rt,我在写 ODT(?)的时候用以下这段代码进行区间推平:
CPP
int bulldoze(int l,int r){
	split(l);
	split(r);
	int ts=0;
	auto it=tr.lower_bound(l);
	while(it!=tr.end()&&it->second<=r){
		ts+=it->second-it->first+1;
		it=tr.erase(it);
	}
	if(ts) tr[r-ts+1]=r;
}
但是这段代码在开 -O2 的情况下竟然会 RE!
有 dalao 知道这是怎么一回事嘛 qwq
tr 为一个 std::map<int,int>,假设 split() 函数没有问题,本地为 GCC 9.2.0,如果加入调试语句会发现抛出了 std::bad_cast

回复

3 条回复,欢迎继续交流。

正在加载回复...