Ссылки в С++

      Комментарии к записи Ссылки в С++ отключены

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 4 мес. назад.

  • Автор
    Сообщения
  • #3677

    Как вы знайте передача аргументов в функцию может осуществляться по значению, то-есть:

    #include <iostream>
    
    using namespace std;
    //Обявления функции
    int func(int a,int b);
    
    int main() {
      setlocale(LC_ALL,"RUSSIAN");
      int a,b;
      cout << "Введите а и b через пробел" << endl;
      cin >> a >> b;
      cout << "Ответ = " << func(a,b) << endl;
      system("PAUSE");
      return 0;
    }
    
    //Определения функции
    int func(int a,int b) {
      return a + b; //Сложение
    }

    Как мы видим числа передались в функцию по значению. И функция вернула результат сложения через оператор return. Но недостаток такого способа, это то что значения копируются в функцию, что с точки зрения эффективности, это не есть хорошо, особенно если эти значения достаточно большие. А так же мы не можем возвращать более 1 значения через оператор return. Сейчас мы переделаем нашу программу:

    #include <iostream>
    
    using namespace std;
    //Обявления функции
    inline void func(int& a,int& b);
    
    int main() {
      setlocale(LC_ALL,"RUSSIAN");
      int a,b;
      cout << "Введите а и b через пробел" << endl;
      cin >> a >> b;
      func(a,b);
      cout << "Ответ = " << "Сложение = " << a << "Умножение = " << b << endl;
      system("PAUSE");
      return 0;
    }
    
    //Определения функции
    inline void func(int& a,int& b) {
      int k;
      k = a;
      a = a + b;
      b = k * b;
    }

    Символ & обозначает ссылку, то есть аргумент int& a ссылается на ту область памяти в которой находиться int a в функции main().
    И при этом мы уменьшаем употребления памяти.

    Для более углубленного изучения можно почитать статью про указатели и ссылки в С++, а также, про r-value ссылки, введенные в стандарте С++11.

Для ответа в этой теме необходимо авторизоваться.