2011-10-13 5 views
0

휘발성 클래스 멤버 함수가있는 경우 클래스 멤버가 해당 함수 내에서 사용되면 휘발성 캐스트를 버릴 수 있습니까?휘발성 함수의 멤버에서 휘발성 캐스트를 버릴 수 있습니까?>

+2

일부 코드 맨 보이기. – deepmax

+0

관련 : http://stackoverflow.com/questions/7367580/c-c-casting-away-volatile-considered-harmful – Mat

+2

진짜 질문은 왜입니까? 휘발성 코드를 제거해야하는 문제를 나타내는 코드가 있습니까? –

답변

4

예. 객체의 휘발성 - 다움을 멀리 던져하려면 const_cast이 사용됩니다

T & t = const_cast<T&>(volatile_t); 

이는 방법입니다. 그러나 코드에서 사용할지 여부와 상관없이 코드를 보지 않고는 말할 수 없습니다. 일반적으로 불변성은 물론 불변성을 없애는 것은 위험한 생각이며, 모든 경우를주의 깊게 조사한 후에해야합니다.

+0

const-cast와 마찬가지로, constness 또는 변동성 보증에서 제공하는 계약을 준수하지 않으면 정의되지 않은 동작이 발생할 수 있습니다. 캐스트는 고정 된 코드의 해결 방법으로 만 사용됩니다. 예를 들어 함수가 참조를 수정하지 않고 어쨌든 비 const 참조로 선언 된 경우. Const-cast는 불가사의하게 변경 가능한 객체를 만들지 않습니다 *! –

0

const_cast을 사용하면 어떤 컨텍스트에서든지 volatile을 버릴 수 있습니다. volatile 회원 내에서 멀리 던지기에 대해 정확히 묻는 중입니다.하지만 차이는 없습니다.

기능의 volatile에게

당신이 volatile -ness 무관 ( volatile 객체 또는 참조를 통해 또는 포인터)하는 volatile 객체의 메소드를 호출하려고하면 컴파일러를 알려주는 검사하지 불평하는 것입니다 회원들의 내가 말하려고 무엇

volatile 의미 과 일치하는 데이터 멤버에 액세스하는 동안 당신이 행동을 기대한다면 단지 때문에 코드가 발생되지 않습니다 volatile 멤버 메소드, 내부에 있다는 것입니다.