C++重载运算符两次,一次返回非const引用和另一个const引用,有什么偏好?

Xin*_*ing 12 c++ const reference operator-overloading operator-keyword

我使用相同的参数列表重载操作符两次.但具有不同的返回类型:

T& operator()(par_list){blablabla}    
const T& operator()(par_list){blablabla}
Run Code Online (Sandbox Code Playgroud)

所以当我调用()运算符时,将根据什么偏好或情况调用哪个函数?我知道如果我在const函数下调用()它必须是const T&one.

我只是好奇C++如何处理这种情况以及默认偏好如何工作.

谢谢

Mik*_*our 25

这些功能不会相互过载; 它们具有相同的签名,因此尝试重新定义相同的函数,这是一个错误.返回类型不是函数签名的一部分.要重载函数,必须声明具有相同名称但不同参数或const/ volatile限定符的第二个函数- 即函数的限定符,而不是返回类型.

(它们也不会相互覆盖;覆盖是派生类对其基类的虚函数所做的事情).

定义成员函数的a const和非const重载是很常见的; 在const过载必须声明的功能const,而不仅仅是返回类型:

T& operator()(par_list){blablabla}
const T& operator()(par_list) const {blablabla}
                              ^^^^^
Run Code Online (Sandbox Code Playgroud)

现在,如果您应用于()const对象,则第一个将被调用,而第二个将应用于const对象.例如:

Thingy nc;
Thingy const c;

nc(); // calls the first (non-const) overload
c();  // calls the second (const) overload
Run Code Online (Sandbox Code Playgroud)