const_cast 연산자const_cast Operator

const volatile 클래스에서, 및 특성을 제거 합니다 __unaligned .Removes the const, volatile, and __unaligned attribute(s) from a class.


const_cast <type-id> (expression)


모든 개체 형식 또는 데이터 멤버에 대 한 포인터에 대 한 포인터는 const , 및 한정자를 제외 하 고 동일한 형식으로 명시적으로 변환 될 수 있습니다 volatile __unaligned .A pointer to any object type or a pointer to a data member can be explicitly converted to a type that is identical except for the const, volatile, and __unaligned qualifiers. 포인터 및 참조의 경우 결과는 원래 개체를 참조합니다.For pointers and references, the result will refer to the original object. 데이터 멤버에 대한 포인터의 경우 결과는 데이터 멤버에 대한 원래(캐스팅 해제) 포인터와 동일한 멤버를 참조합니다.For pointers to data members, the result will refer to the same member as the original (uncast) pointer to data member. 참조 개체의 형식에 따라 결과 포인터, 참조 또는 데이터 멤버에 대한 포인터를 통한 쓰기 작업으로 인해 정의되지 않은 동작이 발생할 수 있습니다.Depending on the type of the referenced object, a write operation through the resulting pointer, reference, or pointer to data member might produce undefined behavior.

연산자를 사용 const_cast 하 여 상수 변수의 상수 상태를 직접 재정의할 수는 없습니다.You cannot use the const_cast operator to directly override a constant variable's constant status.

const_cast 연산자는 null 포인터 값을 대상 형식의 null 포인터 값으로 변환 합니다.The const_cast operator converts a null pointer value to the null pointer value of the destination type.


// expre_const_cast_Operator.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
class CCTest {
   void setNumber( int );
   void printNumber() const;
   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 );

을 포함 하는 줄에서 const_cast 포인터의 데이터 형식은 this const CCTest * 입니다.On the line containing the const_cast, the data type of the this pointer is const CCTest *. const_cast 연산자는 포인터의 데이터 형식을로 변경 하 여 this 멤버를 수정할 수 있도록 합니다 CCTest * number .The const_cast operator changes the data type of the this pointer to CCTest *, allowing the member number to be modified. 캐스팅은 그것이 표시되는 문의 나머지 부분에서만 지속됩니다.The cast lasts only for the remainder of the statement in which it appears.

참고 항목See also

캐스팅 연산자Casting Operators