C++ 重载运算符两次,一次返回非 const 引用,另一次返回 const 引用,哪个优先?

2024-02-26

我使用相同的参数列表重载了一个运算符两次。但返回类型不同:

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(使用前将#替换为@)

C++ 重载运算符两次,一次返回非 const 引用,另一次返回 const 引用,哪个优先? 的相关文章

随机推荐