const_cast
개체의 constness를 취소 할 수 없습니다. const_cast
은 액세스 경로에서 오브젝트에 대한 constness 만 제거 할 수 있습니다. W 세스 경로는 오브젝트에 대한 포인터 또는 참조입니다. 액세스 경로에서 constness를 제거하면 오브젝트 자체에는 아무런 영향을 미치지 않습니다. const_cast
을 사용하여 액세스 경로의 constness를 제거한 경우에도 여전히 오브젝트를 수정할 권한이 부여되지는 않습니다. 당신이 그것을 할 수 있는지 없는지는 여전히 객체 자체에 달려 있습니다. const 인 경우 수정이 허용되지 않으며 그렇게하려는 경우 정의되지 않은 동작이 발생합니다.
예를 들어
,이 i
실제로 일정하지 않은 객체라는 사실이 const_cast
int i = 5; // non-constant object
const int *p = &i; // `p` is a const access path to `i`
// Since we know that `i` is not a const, we can remove constness...
int *q = const_cast<int *>(p);
// ... and legally modify `i`
*q = 10;
// Now `i` is 10
위의 법률 및 유효 유일한 이유의 용도를 보여, 우리는 그것에 대해 알고 .
const int j = 5; // constant object
const int *p = &j; // `p` is a const access path to `j`
int *q = const_cast<int *>(p); // `q` is a non-const access path to `j`
*q = 10; // UNDEFINED BEHAVIOR !!!
C++ 언어가 일정 개체를 수정할 수 없습니다 및 const_cast
에 관계없이 사용하는 방법, 여기에 완전히 힘이 : 원래 객체가 정말 일정이었다 있다면, 위의 코드가 정의되지 않은 동작을 생산하는 것
그것.
mutable
은 완전히 다른 것입니다. mutable
은 포함 된 개체가 const
으로 선언 된 경우에도 법적으로 수정할 수있는 데이터 파일을 만듭니다. 이 의미에서 mutable
은 [상수의 일부 지정 부분]을 수정할 수있게합니다. 반면에 const_cast
은 그렇게 할 수 없습니다.
출처
2012-07-12 18:17:14
AnT