Подтвердить что ты не робот

Когда имеет значение, что `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 не может или где разница влияет на разрешение вызова?

4b9b3361

Ответ 1

Очевидным следствием this, являющегося prvalue, является то, что &this является незаконным. Таким образом, встроенный унарный оператор & делает пример "где может использоваться указатель const lvalue, который не может указывать указатель rvalue". По той же самой основной причине непосредственное связывание ссылок на this невозможно.

Кроме того, prvalue-ness this означает, что this сам не может быть const или volatile, так как скалярные значения не могут иметь типы с квалификацией cv.

Наверное, сложно построить неэзотерические примеры реальных жизненных ситуаций на основе этих различий.