const_cast 运算符
从某个类删除 const
、volatile
和 __unaligned
属性。
语法
const_cast <type-id> (expression)
备注
指向任何对象类型的指针或指向数据成员的指针可显式转换为完全相同的类型(const
、volatile
和 __unaligned
限定符除外)。 对于指针和引用,结果将引用原始对象。 对于指向数据成员的指针,结果将引用与指向数据成员的原始(未强制转换)的指针相同的成员。 根据引用对象的类型,通过生成的指针、引用或指向数据成员的指针的写入操作可能产生未定义的行为。
你不能使用 const_cast
运算符直接重写常量变量的常量状态。
const_cast
运算符将空指针值转换为目标类型的空指针值。
示例
// expre_const_cast_Operator.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
class CCTest {
public:
void setNumber( int );
void printNumber() const;
private:
int number;
};
void CCTest::setNumber( int num ) { number = num; }
void CCTest::printNumber() const {
cout << "\nBefore: " << number;
const_cast< CCTest * >( this )->number--;
cout << "\nAfter: " << number;
}
int main() {
CCTest X;
X.setNumber( 8 );
X.printNumber();
}
在包含 const_cast
的行中,this
指针的数据类型为 const CCTest *
。 const_cast
运算符会将 this
指针的数据类型更改为 CCTest *
,以允许修改成员 number
。 强制转换仅对其所在的语句中的其余部分持续。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈