Если `this` не является const, почему я не могу его изменить?

В this указатель [class.this], стандарт C ++ гласит:

Тип this в функции члена
класс X является X*.

то есть this не является const, Но почему тогда это

struct M {
M() { this = new M; }
};

дает

error: invalid lvalue in assignment  <-- gcc
'=' : left operand must be l-value   <-- VC++
'=' : left operand must be l-value   <-- clang++
'=' : left operand must be l-value   <-- ICC
(source: some online compiler frontends)

Другими словами, this не является const, но это действительно так!

25

Решение

Потому что в том же пункте также упоминается, что this это prvalue («чистое значение»).

Примеры, упомянутые в стандарте для чистого значения rvalue, являются результатом вызова функции, которая не возвращает ссылку, или литералов, подобных 1, true или же 3.5f, this-pointer не является переменной, это больше похоже на литерал, который расширяется до адрес объекта, для которого вызывается функция ([Class.this]). И, например, как буквальный true имеет тип bool а также не bool const, this имеет тип X* а также не X*const,

45

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

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

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