函数重载与常量
Function Overloading with const
struct A
{
void fn(double a) const {}
void fn(int a){}
};
int main()
{
A().fn(1.);
}
对于上述函数,为什么编译器会产生歧义;两种类型都不同。
为什么你只想将int
传递给一个非常量A
?
每个成员函数有两个参数,this
和 a
。因此,您需要一个用于this
的const A*
,double
用于a
,或非常量A*
和int
。
而且调用不完全匹配任何一种选择,因为您有非常量A
和double
。所以编译器既可以将A()
转换为const A
,也可以double
转换为int
。它无法决定哪个是最好的。
相关文章:
- 什么时候可以使用常量装饰调用我的重载函数?
- 如何为非常量和常量重载实现一次成员函数?
- 一种优雅或至少可行的方法,用于使用和接受具有重载方法和运算符的不同大小的文字数组常量
- 重载模板化类的[]运算符的常量版本
- 引用模板类型的赋值运算符需要非常量重载
- MSVC:推理指向具有常量和非常量重载的成员函数的指针
- 为什么 lambda 自动和参数选择常量重载?
- 非常量指针更喜欢常量 T&重载而不是常量 T*
- asio_handler_invoke常量重载
- 不能只删除方法的常量重载?
- 如何获取提供常量重载的函数类型
- 基于常量重载
- 二元运算符 + , = 使用常量重载
- 如何检查成员函数是否具有常量重载
- C++使用一个参数常量重载
- 为什么常量左值与给定 T&& 和常量 T& 重载的常量右值绑定不同?
- 指向常量重载成员函数的指针
- 常量重载和共享指针
- c++非常量-常量重载方法选择
- 如何调用非常量重载