C++ 如果您有两个全局函数,一个是'Widget',另一个是'double',并且'Widget'类定义了一个到double的转换,那么会发生什么?

C++ 如果您有两个全局函数,一个是'Widget',另一个是'double',并且'Widget'类定义了一个到double的转换,那么会发生什么?,c++,type-conversion,operator-overloading,implicit-conversion,overload-resolution,C++,Type Conversion,Operator Overloading,Implicit Conversion,Overload Resolution,我的问题是转换函数(用户定义的强制转换)是否优先于直接调用 假设您重载了一个函数: void display_widget( double f ); void display_widget( Widget a ); 我的问题是,哪个优先级更高: 一种转换函数(用户定义的转换),接受小部件并返回双精度 display\u小部件函数的参数列表中有一个double 我们将看到以下哪一个打印语句序列 +----------------------+-----------------------

我的问题是转换函数(用户定义的强制转换)是否优先于直接调用

假设您重载了一个函数:

void display_widget( double f );    
void display_widget( Widget a );
我的问题是,哪个优先级更高:

  • 一种转换函数(用户定义的转换),接受
    小部件
    并返回
    双精度
  • display\u小部件
    函数的参数列表中有一个
    double
  • 我们将看到以下哪一个打印语句序列

    +----------------------+------------------------------+
    |       option 1       |           option 2           |
    +----------------------+------------------------------+
    | The Widget is: 79.99 | operator double() was called |
    |                      | The double is: 79.99         |
    +----------------------+------------------------------+   
    

    你试过运行你的代码吗?这回答了你的问题吗?@AlanBirtles假设我执行了代码,并观察到了一些结果。这并不意味着观察到的行为是一般行为。也许调用哪个函数是以某种非常随意的方式确定的。例如,哪个
    display\u widget
    definition更靠近文件顶部可能是被调用的。即使行为在一般情况下是相同的,也可能只对某个特定的编译器是相同的。我不知道C++标准是否规定了在这些情况下应该发生什么。
    display_widget(a);
    
    +----------------------+------------------------------+
    |       option 1       |           option 2           |
    +----------------------+------------------------------+
    | The Widget is: 79.99 | operator double() was called |
    |                      | The double is: 79.99         |
    +----------------------+------------------------------+