我正在阅读有关 C++ 中的 const_cast 运算符的内容
1.我无法理解的第一件奇怪的事情是
const_cast 运算符语法,即
-const_cast----(--表达式--)-------------------->
我对这种语法的理解是,它有助于摆脱常量性expression
of type 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)
,我认为 constthis
指针应该被丢弃,但输出显示它是该对象this
指失去其恒定性。
我觉得代码应该是ConstTest *c = const_cast<ConstTest>(*this)
,但这会产生错误。我知道我的很多解释都是错误的。请大家指正。
2.我的第二个问题是下面给出的陈述
除非 Type 是引用类型,否则 const_cast 表达式的结果是右值。在这种情况下,结果是左值。
为什么会这样,为什么在指针的情况下却不是这样?
它有助于消除 Type 类型表达式的常量性
No, Type
是结果的类型,而不是操作数的类型。
我认为这个指针的 const 应该被抛弃
this
有类型const ConstTest*
. const_cast<ConstTest*>(this)
有类型ConstTest*
。这就是从指向 const 的指针中“抛弃 const”的含义。
我觉得代码应该是ConstTest *c =
const_cast<ConstTest>(*this)
的结果const_cast<T>
具有类型 T,这就是它的定义方式。也许你会对它有不同的定义,但运气不好,你没有得到ConstTest*
通过写作const_cast<ConstTest>
,你可以通过写得到它const_cast<ConstTest*>
。您的首选语法不可用。
你可以做ConstTest &c = const_cast<ConstTest&>(*this)
or ConstTest *c = const_cast<ConstTest*>(this)
,所以选择你最喜欢的。
const_cast 表达式的结果是右值,除非 Type 是
参考类型。在这种情况下,结果是左值。
为什么会这样,为什么在指针的情况下不正确?
对于指针来说也是如此。ConstTest*
不是引用类型,并且结果const_cast<ConstTest*>(this)
是一个右值。然后将该值分配给变量c
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)