Я могу получить адрес rvalue путем привязки к ссылке (на которую, как я понимаю, может ссылаться только lvalue).
Есть ли способ получить rvalue, который я могу напрямую взять адрес (например, как &(<rvalue>)
было бы допустимым выражением, без переопределения operator&()
)?
Или, по крайней мере, такое возможно через «привязку» к другому значению? (Похоже, что это не так, поскольку мы можем «связывать» только ссылки, которые являются lvalues, см. Выше. Но, может быть, я здесь упускаю какую-то похожую концепцию.)
Более общий вопрос, на который я пытаюсь ответить, состоит в следующем: верно ли следующее: r-значения строго соответствуют набору выражений, адрес которых можно непосредственно взять, кроме битовых полей lvalue и, возможно, некоторых других таких «специальных» типов lvalue.
вложенное имя спецификатор который обозначает класс, за которым может следовать
ключевое словоtemplate
([temp.names]), а затем следует имя
член этого класса ([class.mem]) или одного из его базовых
классы, это Квалифицированный-идентификатор; [class.qual] описывает поиск имени для
члены класса, которые появляются в квалифицированных идентификаторах. Результатом является член.
Тип результата — это тип члена. Результатом является
lvalue, если член является статической функцией-членом или элементом данных, и
в противном случае.
То есть создание указателя на член для нестатической функции-члена применяет &
оператор првалуе.
Других решений пока нет …