C++自定义Circle类重载逗号运算符未触发调用问题求助
C++重载逗号运算符不触发问题解决
问题根因
你写的代码Circle* newC = *current , *current2;属于变量声明语句,这里的逗号是C++声明语法里的「多变量声明分隔符」,作用是同时声明两个Circle*类型的变量:
- 第一个变量是
newC,尝试用*current(Circle对象)初始化指针,本身就存在语法错误 - 第二个变量是
current2,没有初始化
编译器不会把这个位置的逗号识别为运算符,自然不会触发你重载的函数。
正确调用方式
要触发重载的逗号运算符,必须让逗号处于表达式上下文中,同时因为赋值运算符优先级高于逗号运算符,需要给逗号表达式加括号改变优先级:
Circle* newC = (*current, *current2);
这行代码里括号包裹的*current, *current2会被识别为逗号表达式,触发你重载的Circle::operator,(Circle& other),执行逻辑后返回的Circle*指针会赋值给newC。
额外建议
- 重载逗号运算符属于非常反直觉的操作,会大幅降低代码可读性,更推荐你把合并逻辑封装为普通成员函数,比如
Circle* merge(Circle& other),调用逻辑更清晰,也不会出现语法歧义。 - 你当前实现的
operator=存在内存泄漏,且完全不符合赋值运算符的语义规范,建议调整实现。 reduce函数没有显式返回值,会触发未定义行为,需要补充返回逻辑。
内容的提问来源于stack exchange,提问作者Wesley Brandt
相关产品推荐
相关产品推荐

