Когда имеет значение, что `this` является rvalue?
Я знаю, что тип this
- prvalue ( "чистый" rvalue ) и что он может быть сделан указателем на константу и/или указателем на летучие (затрагивающим обращения к его переменным экземпляра), добавляя ключевые слова const
или volatile
в конец определения функции к которому он принадлежит.
Я также знаю, что this
иногда (некорректно) описывается как указатель на const, возможно, как способ сказать: "вы не можете назначить this
". Как rvalue, он по своей сути невозможен, и поэтому нет необходимости в концепции const
rvalue.
Я также знаю, что в С++ 11 бывают случаи, когда значение rvalue или lvalue может влиять на разрешение вызова, но я пытался работать с возможностями, и я не уверен, есть ли случай, когда на самом деле было бы называть разрешение, что this
является указателем rvalue, а не указателем const
lvalue.
Есть ли случай, когда это различие имеет реальное значение с точки зрения программиста, например контекст, в котором может использоваться указатель rvalue, который не может использоваться указатель const
lvalue, где указатель const
lvalue может использовать, что указатель rvalue не может или где разница влияет на разрешение вызова?
Ответы
Ответ 1
Очевидным следствием this
, являющегося prvalue, является то, что &this
является незаконным. Таким образом, встроенный унарный оператор &
делает пример "где может использоваться указатель const lvalue, который не может указывать указатель rvalue". По той же самой основной причине непосредственное связывание ссылок на this
невозможно.
Кроме того, prvalue-ness this
означает, что this
сам не может быть const
или volatile
, так как скалярные значения не могут иметь типы с квалификацией cv.
Наверное, сложно построить неэзотерические примеры реальных жизненных ситуаций на основе этих различий.