Это общий вопрос о симметрии между указателем и ссылочными типами в языке C ++.
Является ли эта таблица соответствия значимой в C ++ (C ++ 11 и далее)?
| Reference | Pointer |
|-----------|----------------|
| T& | T* const |
| T const& | T const* const |
| T&& | ???* |
и, если таковые имеются, что будет соответствовать ???*
?. (отсутствуют какие-либо дополнительные строки?)
(T&&
для конкретного типа T
, не выводимый тип. См. Ответ @ComicSansMS для завершающего const
.)
Я думаю, это будет соответствовать чему-то вроде std::move_iterator<T*>
, но это не встроенная языковая функция, и кажется, что она создает кучу других проблем (как это делает std::reference_wrapper
).
В языке отсутствует какой-либо указатель r-значения, чтобы быть более симметричным c? Или лучше сказать что-то, что генерирует r-значения на объекте привязки (например, перемещенный объект - или даже копию).
Я знаю, что ссылки на r-значения соответствуют вещи, которая "не имеет имени" Однако, это не кажется ограничительным, если это то же самое получается только для операции почтения *
.
ПРИМЕЧАНИЕ 1:
Я вижу std::move_iterator<It>::operator->()
устарело в C ++ 20. Что я не уверен, что это значит, возможно, это означает, что это может быть реализовано, опционально, иногда. Этот вопрос относится к этому устареванию, потому что в принципе std::move_iterator<It>::operator->()
может вернуть ???*
вместо pointer
. (Или верните move_iterator<pointer>
, хотя это сгенерирует бесконечный регресс из ->()
операторов ... если только не существует истинного указателя для завершения r-значений.)
ПРИМЕЧАНИЕ 2: Кандидат я могу представить, что отсутствует пропущенная строка:
| void& (not a thing) | void* |
, но я думаю, что это не связано с корреспонденцией, задаваемой в вопросе, а с обычной неправильностью void
в языке.