C++ 如果有两个同名的函数(重载),并且有一个转换构造函数,是否会调用转换构造函数?
假设您重载了一个函数:C++ 如果有两个同名的函数(重载),并且有一个转换构造函数,是否会调用转换构造函数?,c++,constructor,type-conversion,overload-resolution,C++,Constructor,Type Conversion,Overload Resolution,假设您重载了一个函数: void display_widget( float f ); void display_widget( Apple a ); 我的问题是,哪个优先级更高: 从float 重载函数的参数列表中有float 以下哪项是描述所发生情况的正确伪代码: +---------------------------------+--------------------------------+ | option 1 |
void display_widget( float f );
void display_widget( Apple a );
我的问题是,哪个优先级更高:
float
float
+---------------------------------+--------------------------------+
| option 1 | option 2 |
+---------------------------------+--------------------------------+
| display_widget( float f ); | a = Apple( float _f ); |
| | display_widget( Apple a ); |
+---------------------------------+--------------------------------+
将选择显示小部件(浮动f)
给定display_小部件(49.95)
,对于要调用的display\u小部件(float)
,隐式转换序列只包含一个标准转换(从double
到float
)。对于要调用的display\u小部件(Apple)
,转换序列包含一个标准转换(从double
到float
)和一个用户定义转换(从float
到Apple
),然后被限定为用户定义转换序列。标准转换序列在中的排名较高
标准转换序列始终优于用户定义的转换序列或省略号转换序列
在重载解析期间,只允许1次隐式转换。由于
49.95
是一个double
,因此只有一个重载将调用一个隐式转换,另一个重载将调用两个隐式转换。@RemyLebeau只允许一个用户定义的隐式转换。多个标准转换或多个标准转换+1个用户定义的转换就可以了。
display_widget(49.95);
+---------------------------------+--------------------------------+
| option 1 | option 2 |
+---------------------------------+--------------------------------+
| display_widget( float f ); | a = Apple( float _f ); |
| | display_widget( Apple a ); |
+---------------------------------+--------------------------------+