Что такое ссылочная переменная в C ++? - PullRequest
27 голосов
/ 04 мая 2010

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

Ответы [ 13 ]

19 голосов
/ 04 мая 2010

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

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

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

14 голосов
/ 08 октября 2012

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

float total=100;
float &sum = total;

Это означает, что total и sum являются одинаковыми переменными.

cout<< total;
cout << sum;

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

10 голосов
/ 04 мая 2010
6 голосов
/ 04 мая 2010

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

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

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

Ссылки на C ++ отличаются от указателей в нескольких важных аспектах:

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

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

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

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

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

3 голосов
/ 09 июля 2016

A Ссылочная переменная - это псевдоним для имени переменной .

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

  1. Вы не можете иметь пустые ссылки. Вы всегда должны быть в состоянии предположить, что ссылка связана с законной частью хранилища.
  2. Как только ссылка инициализируется на объект, она не может быть изменена для указания на какой-либо другой объект, тогда как в случае указателя мы можем сделать так, чтобы она указала на любой другой объект в любое время.
  3. Ссылка должна быть инициализирована во время ее создания. Указатели могут быть инициализированы в любое время.
3 голосов
/ 12 ноября 2013

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

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

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

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

3 голосов
/ 04 мая 2010

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

int foo;
int& bar = foo;

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

См. здесь для получения дополнительной информации.

2 голосов
/ 04 мая 2010

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

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

Ресурс: ССЫЛКА

1 голос
/ 30 июля 2015

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

Ссылка имеет некоторые характеристики константного указателя на объект в том смысле, что она инициализируется при определении. И хотя то, на что оно ссылается или на которое можно ссылаться, может быть изменено, ссылка или сам указатель 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 - это та же ссылка на языке C ++ до C ++ 11. Ссылка rvalue была введена в C ++ 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
0 голосов
/ 25 января 2018

Page 79 ~ 80 C ++ Primer 5-е изд.

Объект : область памяти, имеющая тип

Переменная : Именованный объект или ссылка

Ссылка: Псевдоним для другого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...