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

Что такое ссылочная переменная в С++?

Какое будет краткое определение ссылочной переменной в С++?

4b9b3361

Ответ 1

Ссылка - это объект, который является псевдонимом для другого объекта.

Ссылка не является переменной, поскольку переменная вводится только объявлением объекта. Объект является областью хранения, а в С++ ссылки не (обязательно) занимают какое-либо хранилище.

Поскольку объекты и ссылки представляют собой различные группы объектов в С++, поэтому термин "ссылочная переменная" не имеет смысла.

Ответ 2

Эталонная переменная предоставляет псевдоним (альтернативное имя) для ранее определенной переменной. Например:

float total=100;
float &sum = total;

Это означает, что и total, и sum - одни и те же переменные.

cout<< total;
cout << sum;

Оба будут давать одинаковое значение 100. Здесь оператор & не является адресным оператором; float & означает ссылку на float.

Ответ 4

Первый абзац статья Википедии может легко служить в качестве краткого определения:

В языке программирования С++ ссылка представляет собой простой ссылочный тип данных, который является менее мощным, но более безопасным, чем тип указателя, унаследованный от C.

И цитируя из той же статьи:

Ссылки на С++ отличаются от указателей несколькими существенными способами:

  • Невозможно напрямую ссылаться на ссылочный объект после его определения; любое вхождение его имени относится непосредственно к объекту, который он ссылается.

  • После создания ссылки не может быть позже сделана ссылка на другой объект; он не может быть пересмотрен. Это часто делается с указателями.

  • Ссылки не могут быть пустыми, тогда как указатели могут; каждая ссылка относится к некоторому объекту, хотя она может быть или не быть действительной.

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

Дальнейшее чтение:

Ответ 5

Это переменная, которая ссылается на другую:

int foo;
int& bar = foo;

bar теперь является ссылкой, т.е. что bar содержит местоположение памяти, где foo лежит.

Подробнее см. здесь.

Ответ 6

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

Для получения дополнительной информации посетите:

http://www.cprogramming.com/tutorial/references.html

http://www.tutorialspoint.com/cplusplus/cpp_references.htm

Ответ 7

A Контрольная переменная - это псевдоним для имени переменной .

Он отличается от указателей следующими способами:

  • У вас нет ссылок NULL. Вы всегда должны иметь возможность предположить, что ссылка связана с законной частью хранилища.
  • Когда ссылка инициализируется объектом, ее нельзя изменить, чтобы указывать на любой другой объект, тогда как в случае указателя мы можем в любой момент указать на любой другой объект.
  • Ссылка должна быть инициализирована с момента создания. Указатели могут быть инициализированы в любое время.

Ответ 8

Ссылочные переменные позволяют двум именам переменных обращаться к одному и тому же месту памяти:

int main()
{
    int var1;

    // var2 is a reference variable, holds same value as var1

    int &var2 = var1;
    var1 = 10;

    std::cout << "var1 = " << var1 << std::endl;
    std::cout << "var2 = " << var2 << std::endl;
}

Ресурс: LINK

Ответ 9

Ссылка - это альтернативный ярлык, псевдоним, для объекта, с которым он инициализируется. После инициализации ссылки ее нельзя изменить как альтернативную метку или псевдоним другого объекта. После инициализации ссылка или переменная объекта могут использоваться взаимозаменяемо.

Ссылка имеет некоторые характеристики указателя const для объекта в том, что он инициализируется при определении. И хотя то, что он ссылается или указывает на, может быть изменено, ссылка или указатель const сама не может быть изменена. Однако, поскольку ссылка является альтернативной меткой или псевдонимом, она может или не может существовать как объект данных в отличие от указателя const, который, вероятно, будет существовать, если компилятор не сможет его оптимизировать. И даже если ссылка создается как фактическая сущность компилятором, то есть домашнее хозяйство компилятора, и его следует игнорировать, поскольку она официально не существует, как человек, стоящий за занавеской в ​​Изумрудном городе.

В следующих примерах кода приводятся примеры сравнения и сравнения ссылок с указателем и указателем const:

int myInt;           // create a variable of type int, value not initialized
int myInt2 = 3;      // create a second variable of type int with a value of 3
int &rInt = myInt;   // create a reference to the variable of type int, myInt

rInt = 5;            // myInt now has a value of 5, the reference is an alias for myInt
rInt++;              // myInt now has a value of 6, the reference is an alias for myInt
rInt = myInt2;       // myInt now has the same value as myInt2, a value of 3
int *pInt = &rInt;   // pInt points to myInt
(*pInt)++;           // increments myInt
pInt++;              // increments the pointer which formerly pointed to myInt

int &rInt2;          // error C2530: 'rInt2' : references must be initialized
int *pInt2;          // just fine, uninitialized pointer is ok
int * const pInt3;   // error C2734: 'pInt3' : const object must be initialized if not extern
int * const pInt4 = &myInt;  // define and initialize const pointer
pInt4 = &myInt2;     //  error C3892: 'pInt4' : you cannot assign to a variable that is const

На самом деле существует два типа ссылок: справочник lvalue и rvalue.

Ссылка lvalue - это та же ссылка на языке С++ перед С++ 11. Ссылка на rvalue была введена в С++ 11, чтобы разрешить ссылку на временный объект, чтобы помочь с выполнением перемещения, а не с копией и некоторыми другими действиями, когда копия является неправильным подходом, но шаг является правильным подходом.

Например, сравнение ссылки lvalue и ссылки rvalue в следующих простых исходных строках. Поскольку это int ссылки, это означает, что назначение нецелого значения приводит к тому, что компилятор выполняет преобразование, что приводит к временной переменной. Ссылка rvalue может привязываться к временной переменной, а ссылка lvalue не может.

// assign a double to an int causing creation of temporary    
int &rIntd1 = 1.2;   // error C2440: 'initializing' : cannot convert from 'double' to 'int &'
int &&rIntd2 = 1.2;  // warning C4244: 'initializing' : conversion from 'double' to 'int', possible loss of data

rInt = rIntd2;       // myInt from the code above now has a value of 1, 1.2 was truncated when converting from double to int

Ответ 10

A ссылочная переменная и переменная указателя - это то же самое для машины (компилятор будет генерировать один и тот же машинный код).

Наиболее очевидные преимущества использования ссылочной переменной над переменной указателя в моих знаниях:

  • Легко понять (нет адреса, де-ссылку на все виды головной боли)
  • Сохраняет небольшой набор ввода, поэтому, вероятно, менее подвержен ошибкам.

В приведенном ниже коде левая сторона использует ссылочную переменную, а правая сторона использует переменную указателя. Это то же самое для машины, но вы видите, что используемая ссылочная переменная позволяет вам немного печатать.

Reference variable           Pointer variable
int a = 1;         ~~~~~~    int a = 1;
int &b = a;        ~~~~~~    int *b = &a;
b = 2;             ~~~~~~    *b = 2;
cout << a << '\n'  ~~~~~~    cout << a << '\n'
==============================================
2                  ~~~~~~    2

Ответ 11

Ссылочные переменные (let a), просто для упрощения понимания, другое имя переменной (let x), которое содержит ту же самую точную ячейку памяти, что и x.

int &a = x; означает, что a сохраняет такое же место памяти, что и x.

Например, скажите, что у двух соседей по комнате одна и та же комната. Имя одного друга x, а другое имя для друзей - a. Если a изменяет расположение таблицы, помещенной в комнату, от позиции (x,y,z) до (x1,y1,z1), то изменения видны и другу x, и наоборот.

Ответ 12

Ссылка является альтернативным именем для объекта. Контрольная переменная предоставляет псевдоним для ранее определенных переменных. Объявление ссылки состоит из базового типа a и ссылочной переменной, приравненной к имени переменной.