Вы спрашивали:
как понять "= int ()" в этом объявлении?
bool myLess(const int& x=int(),const int& y=int());
Ваше объявление функции, конечно, возвращает bool, но он принимает два параметра, которые являются константной ссылкой целочисленного типа.=
для каждого параметра дает параметрам значение по умолчанию.int()
вызывает конструктор по умолчанию для базового типа.Конструктор по умолчанию для int
в итоге будет иметь значение prvalue со значением 0
.Это приведет к тому, что x
и y
будут присвоены или изначально созданы со значением 0
.Тогда все, что передается в функцию в качестве аргументов, перезапишет это начальное значение.
Вы можете увидеть объявления функций, написанные так, чтобы убедиться, что сами параметры всегда инициализируются чем-то конкретным 0
.Таким образом, если функция когда-либо вызывается и ссылки используются после вызова функции, при следующем вычислении, использующем ссылочные переменные, не будут использоваться мусорные данные, особенно если внутренний код функции проверяет допустимые данные и делает что-то другое, если значение0
Это гарантирует, что если передан только 1 параметр, то по крайней мере значение по умолчанию будет составлять 0
.
. Он не имеет никакого другого эффекта, чем:
bool myLess(const int& x=0, const int& y=0);
Когда дело доходит до используемого вамипример:
double x1{3.5}, x2{4.5};
bool b = myLess(x1,x2);
Когда вы передаете x1
и x2
в эту функцию, здесь происходит то, что тип double
преобразуется в тип int
и вы потеряете данные или информацию из-за усечения.Даже если x1
имеет значение 3.5
и x2
имеет значение 4.5
, если ваш компилятор скомпилирует приведенный выше код, значения, которые увидит функция, равны 3
и 4
соответственно.