gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:10:37 31 4
gpt4 key购买 nike

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

T& operator()(par_list){blablabla}    
const T& operator()(par_list){blablabla}

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

我只是好奇 C++ 如何处理这种情况以及默认首选项如何工作。

谢谢

最佳答案

这些函数不会互相重载;它们具有相同的签名,因此尝试重新定义相同的函数,这是一个错误。返回类型不是函数签名的一部分。要重载一个函数,您必须声明另一个具有相同名称但参数不同或 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

关于C++ 重载运算符两次,一次返回非 const 引用,另一次返回 const 引用,偏好是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12700682/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com