我正在阅读 C++ 中的 const_cast 运算符
1.我无法理解的第一件事是
const_cast 运算符语法,即
-const_cast--<--Type-->--(--expression--)--------------------><
我对这种语法的理解是它有助于抛弃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;
}
在 line 中ConstTest *c = const_cast<ConstTest*>(this)
,我认为this
指针的 const 应该被丢弃,但输出显示它是 this
引用的对象失去了它的 const-ness。
我觉得代码应该是ConstTest *c = const_cast<ConstTest>(*this)
,但这会产生错误。我知道我在很多解释上都错了。请全部纠正。
2.我的第二个问题是下面给出的陈述
const_cast 表达式的结果是一个右值,除非 Type 是一个引用类型。在这种情况下,结果是一个左值。
为什么会这样,为什么在指针的情况下它不是真的?