常量如何使函数重载
How can const make a function overloads?
我用C++编写了这段代码:
class Foo
{
public:
int& fun(){return var;} // 1st fun
int fun() const {return var;} // 2rd fun
private:
int var;
};
int main()
{
Foo foo;
int i = foo.fun();
return 0;
}
我知道C++不能通过返回值来区分重载函数,但是为什么当我在第二个函数中添加一个 const 时,重载可以工作?"康斯特"做了什么?
编译器无法区分返回类型,因为在执行赋值之前可以进行转换。另一方面,调用函数的对象是函数的参数(尽管是隐式参数),因此编译器可以区分它。
Const 的使用方式如下:
Foo inst1;
const Foo inst2;
inst1.fun(); // 1st fun
inst2.fun(); // 2nd fun
函数名称后的 const 引用隐式this
参数。因此,对于 inst1,它将Foo*
,对于 inst2 const Foo*
.这将引导重载。
返回值不用于选择重载。不允许在同一层上使用具有相同参数集和不同类型的返回值的方法/函数。
对于它的价值,标准(§13.3.1/3,4)中的语言:
同样,在适当的时候,上下文可以构造一个包含隐含对象的参数列表 参数来表示要操作的对象。由于参数和参数在其各自的列表中按位置关联,因此约定是隐式对象参数(如果存在)是 始终是第一个参数,隐含对象参数(如果存在)始终是第一个参数。
对于非静态成员函数,隐式对象参数的类型为
— "对 cv X 的左值引用",用于声明没有 ref-qualifier 或带有 & ref-qualifier 的函数
— "对 cv X 的右值引用",用于使用 &&ref-限定符声明的函数 其中 X 是函数所属的类,cv 是成员函数声明的 cv 限定。[ 示例:对于类 X 的常量成员函数,假定额外参数的类型为"对常量 X 的引用"。
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 可以打印矢量和矢量中的矢量的非重载C++函数
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 使用模板重载函数
- C++线程中,没有重载函数接受 X 参数
- std::vector 没有重载函数的实例与参数列表匹配
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 错误:无法解析对重载函数的引用;你的意思是调用它吗?
- 对重载函数find_first_not_of的不明确调用
- 如何从重载解析中删除重载函数?
- CUDA:重载函数"isnan"的多个实例
- C++派生类重载函数(带有 std::function 参数)不可见
- 避免在人为的重载函数调用中拼写出类型
- C++:如何为多个重载函数保留通用代码路径?
- 什么时候可以使用常量装饰调用我的重载函数?
- 尝试使用谓词函数会导致错误:"std::sort"未找到匹配的重载函数
- std::调用,未找到匹配的重载函数
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 为什么使用不匹配的参数调用重载函数仍然有效
- 如何通过签名作为模板参数来解决重载函数?