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

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

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

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

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

1 ответ

Решение

[expr.prim.id.qual]:

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

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

Другие вопросы по тегам