编译器如何选择正确的重载函数
How the compiler chooses correct overloaded function?
我有一个带有以下构造函数的类:
Color(const float red = 0.0f, const float green = 0.0f, const float blue = 0.0f, const float alpha = 1.0f);
Color(const unsigned char red, const unsigned char green, const unsigned char blue, const unsigned char alpha);
Color(const unsigned long int color);
如果我这样称呼它:
Color c{ 0.0f, 1.0f, 0.0f, 1.0f };
一切都很好。但如果我称之为
Color c{ 78, 180, 84, 255 };
或
Color c{ 0xffffffff };
我收到
错误C2668:"Color::Color":对重载函数的调用不明确
为什么?如何使其正确选择?
Color c{ 0.0f, 1.0f, 0.0f, 1.0f };
是明确的,编译器可以选择采用浮点参数的构造函数。
对于Color c{ 78, 180, 84, 255 };
,文字实际上是签名的类型。因此编译器必须转换文字。它有两个选择,不知道该选哪一个。
如果您编写了Color c{static_cast<unsigned char>(78), static_cast<unsigned char>(180), static_cast<unsigned char>(84), static_cast<unsigned char>(255) };
,尽管很乏味,那么采用const unsigned char
参数的构造函数将被自动调用。
同样,对于Color c{ 0xffffffff };
,数字也是一个符号十六进制文字。所以编译器不知道该使用哪一个。
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 可以打印矢量和矢量中的矢量的非重载C++函数
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 使用模板重载函数
- C++线程中,没有重载函数接受 X 参数
- std::vector 没有重载函数的实例与参数列表匹配
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 错误:无法解析对重载函数的引用;你的意思是调用它吗?
- 对重载函数find_first_not_of的不明确调用
- 如何从重载解析中删除重载函数?
- CUDA:重载函数"isnan"的多个实例
- C++派生类重载函数(带有 std::function 参数)不可见
- 避免在人为的重载函数调用中拼写出类型
- C++:如何为多个重载函数保留通用代码路径?
- 什么时候可以使用常量装饰调用我的重载函数?
- 尝试使用谓词函数会导致错误:"std::sort"未找到匹配的重载函数
- std::调用,未找到匹配的重载函数
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 为什么使用不匹配的参数调用重载函数仍然有效
- 如何通过签名作为模板参数来解决重载函数?