Подтвердить что ты не робот

В С++, что означает и означает после возвращаемого типа функции?

В С++-функции, подобной этой:

int& getNumber();

что означает &? Отличается ли он от

int getNumber();
4b9b3361

Ответ 1

Да, версия int& возвращает ссылку на int. Версия int возвращает значение int по значению.

Смотрите раздел по ссылкам в FAQ на С++

Ответ 2

Это другое.

int g_test = 0;

int& getNumberReference()
{
     return g_test;
}

int getNumberValue()
{
     return g_test;
}

int main()
{
    int& n = getNumberReference();
    int m = getNumberValue();
    n = 10;
    cout << g_test << endl; // prints 10
    g_test = 0;
    m = 10;
    cout << g_test << endl; // prints 0
    return 0;
}

getNumberReference() возвращает ссылку, под капотом это как указатель, указывающий на целочисленную переменную. Любые изменения, применяемые к ссылке, относятся к возвращенной переменной.

getNumberReference() также является левым значением, поэтому его можно использовать следующим образом:

getNumberReference() = 10;

Ответ 3

Да, это другое.

Это означает, что вы возвращаете ссылку. В противном случае он вернет копию (ну, иногда компилятор ее оптимизирует, но это не проблема).

Примером является вектор. Оператор [] возвращает &. Это позволяет нам:

my_vector[2] = 42;

Это не сработает с копией.

Ответ 4

Различие заключается в том, что без & то, что вы получаете, это копия возвращенного int, подходящего для перехода в другие подпрограммы, по сравнению с материалом или копирования в вашу собственную переменную.

С & то, что вы получаете, по существу, является переменной, содержащей возвращаемое целое число. Это означает, что вы можете поместить его в левую часть задания, например:

getNumber() = 200;

Ответ 5

int& getNumber(): функция возвращает целое число по ссылке.

int getNumber(): функция возвращает целое значение по значению.

Они несколько отличаются друг от друга, и одним из интересных отличий является то, что 1-й тип можно использовать в левой части задания, что невозможно для второго типа.

Пример:

int global = 1;

int& getNumber() {
        return global; // return global by reference.
}

int main() {

        cout<<"before "<<global<<endl;
        getNumber() = 2; // assign 2 to the return value which is reference.
        cout<<"after "<<global<<endl;

        return 0;
}

Ouptput:

before 1
after 2

Ответ 6

В первой версии вы можете написать getNumber() = 42, что, вероятно, не то, что вы хотите. Возвращаемые ссылки очень полезны при перегрузке operator[] для ваших типов контейнеров. Это позволяет вам писать container[9] = 42.

Ответ 7

"&" означает ссылку, в данном случае "ссылку на int".

Ответ 8

Это означает, что это ссылочный тип. Какая ссылка?

Википедия:

В языке программирования С++ ссылка представляет собой простой ссылочный тип данных, который является менее мощным, но более безопасным, чем тип указателя, унаследованный от C. Ссылка на ссылку С++ может вызвать путаницу, так как в информатике ссылка является общим типом данных концепции, с указателями и ссылками на С++, являющимися конкретными реализациями ссылочных типов данных. Объявление формы:

Тип и имя

где - тип и идентификатор, тип которого является ссылкой to.

Примеры:

  • int A = 5;
  • INT & rA = A;
  • extern int & гв;
  • INT & foo();
  • void bar (int & rP);
  • класс MyClass {int & M_B;/*... */};
  • int funcX() {return 42; }; int (& xFunc)() = funcX;

Здесь rA и rB имеют тип "reference to int", foo() - функция, которая возвращает ссылку на int, bar() является функция с опорным параметром, это ссылка на int, MyClass - это класс с членом, который ссылка на int, funcX() является функция, возвращающая int, xFunc() является псевдонимом для funcX.

Остальное объяснение здесь

Ответ 9

Это ссылка

Ответ 10

Это означает, что он возвращает reference в int, а не в int.

Ответ 11

Это ссылка, которая в точности похожа на указатель, за исключением того, что вам не нужно использовать оператор-указатель-указатель (* или → ) с ним, подразумевается разыменование указателя.

В частности, обратите внимание, что все проблемы, связанные с жизненным циклом (например, не возвращать переменную стека по адресу), по-прежнему необходимо решать так же, как если бы использовался указатель.