Если у меня есть две разные постоянные переменные-члены, которые нужно инициализировать на основе одного и того же вызова функции, есть ли способ сделать это, не вызывая функцию дважды?
Например, класс дроби, в котором числитель и знаменатель постоянны.
int gcd(int a, int b); // Greatest Common Divisor
class Fraction {
public:
// Lets say we want to initialize to a reduced fraction
Fraction(int a, int b) : numerator(a/gcd(a,b)), denominator(b/gcd(a,b))
{
}
private:
const int numerator, denominator;
};
Это приводит к потере времени, так как функция GCD вызывается дважды. Вы также можете определить новый член класса gcd_a_b
и сначала назначить вывод gcd в списке инициализаторов, но затем это приведет к потере памяти.
В общем, есть ли способ сделать это без потраченных впустую вызовов функций или памяти? Можете ли вы создать временные переменные в списке инициализаторов? Спасибо.