Порядок const, type и & в параметре конструктора копирования - PullRequest
1 голос
/ 29 марта 2020

Мне сказали, что порядок const, type и & не имеет значения, так как здесь упоминается . Мой пользовательский тип - PNG.

. Поэтому я написал свой конструктор копирования как:

PNG(const & PNG);

, но получил ошибку:

error: C++ requires a type specifier for all declarations
    PNG(const & PNG);

Решения на Stackoverflow на такую ​​ошибку не работает с конструктором копирования, поэтому я решил опубликовать другой вопрос.

Когда я переписал его как

PNG(PNG const &);

, ошибка исчезла. Что мне не хватает? Является ли конструктор копирования особым случаем?

1 Ответ

1 голос
/ 29 марта 2020

Это просто неверный синтаксис. Удалите квалификатор const, и вы получите

PNG( & PNG);

, что не имеет смысла. Это то же самое, что написать указатель вместо ссылки

PNG( * PNG);

. В обоих случаях спецификатор типа отсутствует. Ссылки и указатели должны ссылаться на спецификатор типа.

Вы можете написать либо

PNG(const PNG & );

, либо

PNG( PNG const & );

Обратите внимание на то, что напротив указателей нет константы ссылка. Например, для указателя вы можете написать

PNG( const PNG * const );

. Для справки такое объявление

PNG( const PNG & const );

недопустимо.

Согласно грамматике C ++ ссылки являются частями деклараторов. Например, вы можете написать

PNG( PNG const ( & ) );

, потому что деклараторы могут быть заключены в скобки.

...