const_cast 연산자
클래스에서 const
, volatile
및 __unaligned
특성을 제거합니다.
구문
const_cast <type-id> (expression)
설명
개체 형식에 대한 포인터 또는 데이터 멤버에 대한 포인터는 , volatile
및 __unaligned
한정자를 제외하고 const
동일한 형식으로 명시적으로 변환할 수 있습니다. 포인터 및 참조의 경우 결과는 원래 개체를 참조합니다. 데이터 멤버에 대한 포인터의 경우 결과는 데이터 멤버에 대한 원래(캐스팅 해제) 포인터와 동일한 멤버를 참조합니다. 참조 개체의 형식에 따라 결과 포인터, 참조 또는 데이터 멤버에 대한 포인터를 통한 쓰기 작업으로 인해 정의되지 않은 동작이 발생할 수 있습니다.
연산자를 const_cast
사용하여 상수 변수의 상수 상태 직접 재정의할 수 없습니다.
const_cast
연산자는 null 포인터 값을 대상 형식의 null 포인터 값으로 변환합니다.
예시
// 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 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기