社区讨论

C++ 神奇语法

灌水区参与者 13已保存回复 20

讨论操作

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

当前回复
20 条
当前快照
1 份
快照标识符
@lo11rdn1
此快照首次捕获于
2023/10/22 13:47
2 年前
此快照最后确认于
2023/11/02 13:17
2 年前
查看原帖
CPP
struct Node{
	Segment pre,suf,tot,maxseg;
	bool lazy;
}now[MAXN * 4],inv[MAXN * 4];
Node operator+(Node nl,Node nr){
	//...
}
class SegmentTree{
	//...
}
可以通过编译,而下面这个不行。
CPP
class SegmentTree{
private:
	struct Node{
		Segment pre,suf,tot,maxseg;
		bool lazy;
	}now[MAXN * 4],inv[MAXN * 4];
	Node operator+(Node nl,Node nr){
		//...
	}
};
提示 'SegmentTree::Node SegmentTree::operator+(SegmentTree::Node, SegmentTree::Node)' must have either zero or one argument,显然把这个运算符重载当做了一个成员函数,可是咱并没有在类内写运算符重载啊?为什么会被识别为成员函数呢?
难道说它只识别是否在类内申明,就算在 SegmentTree 的类内重载也会被识别为成员函数?这真的不算漏洞吗?

回复

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

正在加载回复...