Nabeel Munir Ответов: 2

Здравствуйте, мне нужна помощь с пониманием & в C++, как это работает


Я смотрел на простой код c++ и увидел что-то вроде int& b в функции.
Я не понимаю, что здесь делает этот &.
Любая помощь будет оценена по достоинству.

Что я уже пробовал:

#include<iostream>

using namespace std;


int fun1(int a ,int& b);

int main(){
	int a=3,b=12;
	
	fun1(a,b);
	

}

int fun1(int a, int& b){
	a = a*b;
	b=a+7;
}

nv3

Любой учебник по С++ сказал бы вам об этом :-) Но решение 1 приведет вас и туда.

2 Ответов

Рейтинг:
2

User 7429338

В функции int fun1(int a ,int& b), a является ли аргумент переданным по значению и b это аргумент, передаваемый по ссылке.

Разница объясняется здесь:
7.2 - передача аргументов по значению | Learn C++[^]
7.3 - передача аргументов по ссылке | Learn C++[^]


Рейтинг:
1

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';
  }
}