Неявные преобразования параметров или возвращаемых типов имеют приоритет в C ++? - PullRequest
2 голосов
/ 02 декабря 2008

Если у меня есть код:

int f(int a) { return a; }
double f(double g) { return g; }

int main()
{
    int which = f(1.0f);
}

Какая перегрузка f называется и почему?

Ответы [ 2 ]

8 голосов
/ 02 декабря 2008

Тип возврата вообще не учитывается в целях перегрузки, поэтому вы получите двойную версию.

3 голосов
/ 03 декабря 2008

Чтобы понять, почему это так, рассмотрим этот вызов:

int bar = f(g(h(foo)));

Поскольку разрешение перегрузки включает только аргументы, вы можете вывести h, затем g и, наконец, f независимо. Если возвращаемое значение было задействовано, вам нужно вывести их одновременно. Если каждая имеет 10 перегрузок, в первом случае вы проверяете 30 возможных перегрузок, а во втором - 1000 возможных комбинаций. И если вы думаете, что такой вложенный код встречается редко, рассмотрите

std::cout << "int i = " << i << std::endl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...