Если у вас есть две глобальные функции для Widget и другая для Double, а класс Widget определяет приведение к двойному, что произойдет? - PullRequest
0 голосов
/ 29 сентября 2019

У меня вопрос, если функции преобразования (пользовательские преобразования) имеют приоритет над прямыми вызовами.

Предположим, вы перегружаете функцию:

void display_widget( double f );    
void display_widget( Widget a );

У меня вопрос, который имеет более высокийприоритет:

  1. функция преобразования (пользовательское приведение), принимающая Widget и возвращающая double
  2. Функция display_widget, имеющая double в своем параметреlist
#include <iostream>

class Widget  {
    public:

        Widget() : d{ 0.0 } {};

        double get_d() { return d; }

        operator double()  { 
            std::cout << "operator double() was called" << std::endl;
            return d;
        }

    private:

        double d;
};      

void display_widget( double widget ) {
    std::cout << "The double is: " << widget << std::endl;
}    

void display_widget( Widget widget )  {
    std::cout << "The Widget is: " << widget.get_d() << std::endl;
}

int main(int argc, char* argv[]) {      
    Widget a{ 79.99 };    
    display_widget(a);
    return 0;
}

Обратите внимание, что у нас есть две функции display_widget, одна из которых принимает Widget, а другая принимает double

. Рассмотрим следующую строку внутри main:

display_widget(a);

Какую из следующих последовательностей операторов печати мы увидим?

+----------------------+------------------------------+
|       option 1       |           option 2           |
+----------------------+------------------------------+
| The Widget is: 79.99 | operator double() was called |
|                      | The double is: 79.99         |
+----------------------+------------------------------+   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...