Как перегрузка функций работает с двойным и плавающим - PullRequest
0 голосов
/ 08 января 2019

У меня есть два перегруженных метода

double Sum(double n1, double n2)
{
     return n1 + n2;
}

float Sum(float n1, float n2)
{
     return n1 + n2;
}

Когда я вызываю Sum (5.5, 5.5), вызывается метод с двойным типом возврата. Мой вопрос заключается в том, почему вызывается метод с двойным типом возврата, а не метод с плавающим типом возврата. Как компилятор решает, какой метод должен быть вызван.

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Поскольку тип по умолчанию с плавающей запятой - двойной в c ++ ... Поэтому, когда вы вызываете функцию sum (5.5,5.5) ... Компилятор перейдет к функции, которая возвращает тип double ... Если вы хотите вызвать функцию с плавающей запятой, вы должны написать «f» после числа 5.5 ..... например, sum (5.5f, 5.5f) ... или вы можете инициализировать две переменные как тип с плавающей запятой и отправить их в качестве параметра функции. ...

0 голосов
/ 08 января 2019

Потому что литералы с плавающей точкой, такие как 5.5 , имеют тип double в C ++ по умолчанию. Вот почему, когда вы передаете двойной литерал перегруженной функции, она вызывает версию той функции, которая принимает параметры двойного типа.

Если вы хотите переопределить это поведение по умолчанию, вам нужно использовать суффиксную нотацию , например, f, чтобы сообщить компилятору, какой тип имеет литерал. Например, вам нужно передать Sum(5.5f, 5.5f) вместо Sum(5.5, 5.5), чтобы избежать поведения по умолчанию.

...