C++ 编译器如何选择正确的重载函数?
我有一个包含以下构造函数的类:C++ 编译器如何选择正确的重载函数?,c++,overloading,C++,Overloading,我有一个包含以下构造函数的类: 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 un
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 };
或
我收到
错误C2668:“颜色::颜色”:对重载函数的调用不明确
为什么??如何使其正确选择?颜色c{0.0f,1.0f,0.0f,1.0f}是明确的,编译器可以选择接受浮点参数的构造函数 用
颜色c{78,180,84,255}代码>,文本实际上是有符号的类型。因此编译器必须转换文本。它有两个选择,不知道该选哪一个
如果你写过,虽然很乏味,Color c{static_cast(78)、static_cast(180)、static_cast(84)、static_cast(255)}
则会自动调用采用常量unsigned char
参数的构造函数
同样,使用颜色c{0xffffffff}代码>,该数字再次是有符号十六进制文字。因此编译器不知道使用哪种颜色。类似于带有颜色c{78U,180U,84U,255U}的不幸的是代码>我也有同样的错误。78U不是无符号字符
文字。完全正确!它是一个无符号整数。非常感谢。
Color c{ 0xffffffff };