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 );     |
    +---------------------------------+--------------------------------+