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