Я читал об операторе const_cast в c ++
1.Первая странная вещь, которую я не могу понять, это
Синтаксис оператора const_cast, т.е.
-const_cast - <- Вид -> - (- выражение -) --------------------> <</p>
Что я понимаю об этом синтаксисе, так это о том, что он помогает отбрасывать константу expression
типа Type
. Но рассмотрим этот код
class ConstTest {
private:
int year;
public:
ConstTest() : year(2007) {}
void printYear() const;
};
int main() {
ConstTest c;
c.printYear();
return 0;
}
void ConstTest::printYear() const {
ConstTest *c = const_cast<ConstTest*>(this);
c->year = 42;
std::cout << "This is the year " << year << std::endl;
}
Здесь, в строке ConstTest *c = const_cast<ConstTest*>(this)
, я думаю, что константа this
указателя должна быть отброшена, но выходные данные показывают, что это объект, к которому относится this
, который теряет свое постоянство.
Мне кажется, что код должен был быть ConstTest *c = const_cast<ConstTest>(*this)
, но это приводит к ошибке. Я знаю, что ошибаюсь во многих интерпретациях. Пожалуйста, исправьте их все.
2.Мой второй проблемой является следующее утверждение
Результатом выражения const_cast является значение r, если тип не является ссылочным типом. В этом случае результатом будет lvalue.
Почему это так, и почему это не так в случае указателей?