Является ли const T & rf = lvalue T преобразованием идентичности? - PullRequest
1 голос
/ 19 февраля 2020
T t;
const T& rf = t; // #1

Рассмотрим инициализацию #1, показанную выше. Это преобразование личности? Другими словами, связывает ли rf непосредственно с выражением инициализатора? Если не так, сколько стандартных преобразований имеет # 1 и как называются эти преобразования?

1 Ответ

2 голосов
/ 20 февраля 2020

Это преобразование личности. [over.ics.ref] / 1 :

Когда параметр ссылочного типа связывается непосредственно с выражением аргумента, последовательность неявного преобразования является преобразованием идентичности, если только выражение аргумента не имеет тип, являющийся производным классом типа параметра, в этом случае неявная последовательность преобразования является преобразованием производного в основание ([over.best.ics]). [...] Если параметр привязывается непосредственно к результату применения функции преобразования к выражению аргумента, последовательность неявного преобразования представляет собой определяемую пользователем последовательность преобразования со второй стандартной последовательностью преобразования, либо преобразованием идентичности, либо, если преобразование Функция возвращает сущность типа, являющегося производным классом типа параметра, Преобразование из производного в базовое.

(выделено мной)

В вашем случае аргумент тип совпадает с типом параметра, поэтому тип аргумента не является производным от типа параметра и не требует определяемой пользователем функции преобразования.

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