CPallini
Ссылки-это способ реализации функций out-параметры, как указатели делали на равнине C
программирование. C++17
предлагает разрушение, чтобы избежать их. Попробуйте например
#include <iostream>
#include <tuple>
#include <cmath>
using namespace std;
// rho and phi modification are visible to the caller
void polar( double x, double y, double & rho, double & phi)
{
rho = sqrt(x*x + y*y);
phi = atan2(x,y);
}
// prho, pphi provide access to actual caller variables
void c_style_polar( double x, double y, double * prho, double *pphi)
{
*prho = sqrt(x*x +y*y);
*pphi = atan2(x,y);
}
// the return value is an aggregate, the C++17 syntax allows to destructure it in plain doubles
tuple <double , double> tupled_polar(double x, double y)
{
return make_tuple<double, double> ( sqrt(x*x+y*y), atan2(x,y));
}
int main()
{
double x = 100, y = 100;
// C++ out parameters
{
double rho, phi;
rho = 0.0; phi = 0.0;
polar(x, y, rho, phi);
cout << "rho = " << rho << ", phi = " << phi << '\n';
}
// C-style out parameters
{
double rho, phi;
c_style_polar(x, y, &rho, &phi);
cout << "rho = " << rho << ", phi = " << phi << '\n';
}
// C++17 destructuring
{
auto [rho, phi] = tupled_polar(x, y);
cout << "rho = " << rho << ", phi = " << phi << '\n';
}
}