我使用相同的参数列表重载了一个运算符两次。但返回类型不同:
T& operator()(par_list){blablabla}
const T& operator()(par_list){blablabla}
那么,当我调用 () 运算符时,会根据什么偏好或情况调用哪个函数?我知道如果我在 const 函数下调用 () 它必须是 const T& 。
我只是好奇 C++ 如何处理这种情况以及默认首选项如何工作。
Thanks
这些函数不会互相重载;它们具有相同的签名,因此尝试重新定义相同的函数,这是一个错误。返回类型不是函数签名的一部分。要重载函数,必须声明第二个具有相同名称但参数不同的函数,或者const
/volatile
限定符 - 即函数的限定符,而不是返回类型。
(它们也不互相重写;重写是派生类对其基类的虚函数所做的事情)。
定义一个是很常见的const
和一个非const
成员函数的重载;这const
重载必须声明函数const
,不仅仅是返回类型:
T& operator()(par_list){blablabla}
const T& operator()(par_list) const {blablabla}
^^^^^
现在,如果您申请,第一个将被调用()
到一个非const
对象,第二个在const
目的。例如:
Thingy nc;
Thingy const c;
nc(); // calls the first (non-const) overload
c(); // calls the second (const) overload
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)