Синтаксис конструктора копирования 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&);

Имеет амперсанд после параметра 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.

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