我在C++行为
1.首先奇怪的事情我无法理解的是
的const_cast运算符的语法即
阅读的const_cast操作-const_cast-- < - 类型 - > - ( - 表达式 - )--------------------> <
我有什么都懂这个语法是,它有助于抛弃常量性Type
类型的expression
的。但考虑下面的代码
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.my第二个问题是如下
给出的const_cast表达式的结果的语句是一个rvalue除非类型是引用类型。在这种情况下,结果是一个左值。
这是为什么,以及为什么它不是真的指针?
最好避免const_cast,直到你理解语言好得多。它的使用是非常危险的。 – 2012-02-03 17:36:23