2025-11-20 05:47:51
重载运算符不能随便加默认参数啊。比如你写个加法符,如果后面带个默认0,那a+b和a+0就分不清哪个是真实的参数了。编译器得先看参数数量,后看具体值。比如a+5和a+0都符合,但参数数量不同,这样就会冲突。
这是因为C++标准直接规定运算符重载不能带默认参数。比如在C++11里写int a=5; a++;,这里的++是重载的,但参数不能加默认值。假设强行加默认参数0,那么a+和a+0都会被解析成a+(0),但标准要求运算符必须明确参数数量。比如测试代码:int a=5; a+; //会报错。因为标准强制要求运算符重载函数不能有默认参数,这是为了防止参数数量不明确。比如查资料发现,C++官方文档明确说明"运算符重载函数不能有默认参数",所以这是硬性规定。比如试过的人都说,如果加默认参数,编译器会直接报错"重载函数参数不匹配"。比如有个例子:class Test{public: int operator+(int x=0){ return 0; }}; int a=5; a+; //编译错误。这说明必须严格按照标准来写,不能随便加默认参数。
本题链接: