& в объявлении функции возвращает тип

Что означает & в следующем?

class Something
{
 public:
   int m_nValue;

   const int& GetValue() const { return m_nValue; }
   int& GetValue() { return m_nValue; }
};

Этот код взят отсюда.

1 ответ

Это означает возвращаемое значение по ссылке:

   int& GetValue()
     ^ Means returns a reference of int

подобно

int i = 10;

int& GetValue() {
    int &j = i;
    return j;
}

j является ссылкой на iглобальная переменная.

Примечание: в C++ у вас есть три вида переменных:

  1. Значение переменной например int i = 10,
  2. Ссылочная переменная например int &j = i;Ссылочная переменная создает псевдоним другой переменной, оба являются символическими именами одной и той же ячейки памяти.
  3. Адресная переменная: int* ptr = &i, называется указатели. Переменные указателя используют для хранения адреса переменной.

Почтение в декларации

   Pointer:
           int  *ptr = &i;
                ^      ^  & is on the left side as an address operation
                |
                * For pointer variable.

   Reference:

           int &j = i;
               ^
               | & on the right side for reference

Помните, что в C у вас есть только два вида переменных value и address (указатель). Ссылочные переменные есть в C++, и ссылки просты в использовании как переменные значения и так же способны, как переменные указателя.

Указатели похожи на:

                      j = &i;

                      i                   j
                   +------+            +------+
                   | 10   |            | 200  |
                   +------+            +------+
                     202                 432

Ссылка, как:

                   int &j = i;

                    i, j
                   +------+
                   | 10   |
                   +------+

Нет памяти выделено для j. Это псевдоним того же места в памяти.

Каковы различия между указательной переменной и ссылочной переменной в C++?

  1. Указатель может быть переназначен любое количество раз, в то время как ссылка не может быть переназначена после инициализации.
  2. Указатель может указывать на NULL, а ссылка никогда не может указывать на NULL.
  3. Вы не можете взять адрес ссылки, как вы можете с указателями
  4. Там нет "ссылочной арифметики" (но вы можете взять адрес объекта, на который указывает ссылка, и выполнить арифметику указателей на нем, как в &obj + 5).

Поскольку, как вы прокомментировали, у вас есть вопросы о различиях между указателями и ссылочными переменными, поэтому я настоятельно рекомендую вам прочитать соответствующие страницы по ссылке, которую я дал в своем ответе.

Другие вопросы по тегам