Есть ли значение, по которому я могу напрямую взять адрес?

Я могу получить адрес rvalue путем привязки к ссылке (на которую, как я понимаю, может ссылаться только lvalue).

Есть ли способ получить rvalue, который я могу напрямую взять адрес (например, как &(<rvalue>) было бы допустимым выражением, без переопределения operator&())?

Или, по крайней мере, такое возможно через «привязку» к другому значению? (Похоже, что это не так, поскольку мы можем «связывать» только ссылки, которые являются lvalues, см. Выше. Но, может быть, я здесь упускаю какую-то похожую концепцию.)

Более общий вопрос, на который я пытаюсь ответить, состоит в следующем: верно ли следующее: r-значения строго соответствуют набору выражений, адрес которых можно непосредственно взять, кроме битовых полей lvalue и, возможно, некоторых других таких «специальных» типов lvalue.

1

Решение

[Expr.prim.id.qual]:

вложенное имя спецификатор который обозначает класс, за которым может следовать
ключевое слово template ([temp.names]), а затем следует имя
член этого класса ([class.mem]) или одного из его базовых
классы, это Квалифицированный-идентификатор; [class.qual] описывает поиск имени для
члены класса, которые появляются в квалифицированных идентификаторах. Результатом является член.
Тип результата — это тип члена. Результатом является
lvalue, если член является статической функцией-членом или элементом данных, и
в противном случае.

То есть создание указателя на член для нестатической функции-члена применяет & оператор првалуе.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]