礼品代发网

礼品代发网

收录130107113题,礼品代发网免费搜题解答

今日已更新0道题

为什么重载-为什么重载运算符不能有默认的参数

2025-11-20 05:58:31  

为什么重载-为什么重载运算符不能有默认的参数

优质解答

重载运算符不能随便加默认参数,不然编译器会闹别扭。比如写个加法函数,如果让左边的数有默认值,右边的数可能就不知道该填啥了。像这样写"int operator+(int a, int b=0)"就会报错,说参数类型不匹配。因为运算符重载的左边参数必须是运算符本身,不能偷偷塞进去默认值。

为啥这么规定呢?因为运算符左边是隐式类型转换的。比如"3 + a"会自动把3转成int类型,这时候如果右边参数有默认值,编译器就分不清到底是把左边转成默认值类型,还是右边用默认值。根据C++标准文档(C++11 8.3.3条),运算符重载的左边参数不能有默认参数,否则会导致二义性。比如在测试代码里尝试这样写,会直接报错"invalid conversion from 'int' to 'int' (where type is deduced as 'int')"。所以必须严格按规则来,否则程序就会崩溃或者行为不可预测。

本题链接:

运算符重载默认参数