Синтаксис конструктора копирования C ++: является ли амперсанд ссылкой на значения r / l?

Ниже приводится выдержка из моего текста на C ++, иллюстрирующая синтаксис объявления класса с помощью конструктора копирования.

class Student {
int no;
char* grade;
public:
Student();
Student(int, const char*);
Student(const Student&);
~Student();
void display() const;
};

Конструктор копирования, как показано здесь:

Student(const Student&);

Имеет амперсанд после Параметр Студент.

В C и C ++, как я полагаю, символ амперсанда используется в качестве оператора адреса для указателей. Конечно, стандартно использовать & персонаж до имя указателя, и конструктор копирования использует его после, так что я предполагаю, что это не тот же оператор.

Другое использование символа амперсанда, которое я нашел, относится к Rvalues ​​и Lvalues, как показано здесь: http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html

Мой вопрос не о Rvalues ​​и Lvalues, я просто хочу знать Зачем & персонаж размещен после Параметр, и как это называется, и если / почему это необходимо.

-1

Решение

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

int i = 10;
int& iref = i;

Вот iref это ссылка на i,

Любые изменения, внесенные в i виден сквозь iref и любые изменения, внесенные в iref виден сквозь i,

iref = 10; // Same as i = 10;
i = 20;    // Same as iref = 20;

Ссылка может быть ссылкой lvalue или ссылкой rvalue. В приведенном выше примере iref является ссылкой на lvalue.

int&& rref = 10;

Вот rref это ссылка на значение.

Вы можете прочитать больше о ссылках rvalue на http://en.cppreference.com/w/cpp/language/reference.

1

Другие решения

Других решений пока нет …