만약 내가 가지고 있다면:
struct whatever {
int data;
};
volatile whatever test;
것 test.data
역시 변동성이?
답변
다른 질문을 할 수 있습니다 (또는 단순히 원래 질문을 보는 다른 방법).
구조체를 const
만들면 모든 멤버가 생성 const
됩니까?
만약 내가 가지고 있다면:
struct whatever { int data; };
const whatever test;
test.data도 const
마찬가지입니까?
내 대답은 : 네. 당신이 형식의 개체를 선언하는 경우 whatever
에 const
모든 회원이 될 것이다 const
너무
당신이 형식의 개체를 선언하는 경우 마찬가지로, whatever
함께 volatile
모든 회원이 될 것입니다 volatile
당신이 가진 개체를 선언하는 경우처럼, 너무 const
, 모든 그것의 회원이 될 것이다 const
너무.
const
및 volatile
동전의 양면이다; 표준에서 종종 cv-qualifiers
.
표준에서 인용 ($ 7.1.5.1 / 8)
[참고 : volatile은 객체 의 값이 구현에서 감지 할 수없는 수단으로 변경 될 수
있기 때문에 객체와 관련된 공격적인 최적화를 피하기 위한 구현 에 대한 힌트 입니다. 자세한 의미는 1.9를 참조하십시오. 일반적으로 volatile의 의미는 C에서와 같이 C + +에서 동일합니다.]
개체가 구조체의 인스턴스 인 경우 그 수단은 다음 컴파일러는 할 수없는 객체를 포함하는 공격적인 최적화를 피하기 , 하지 않는 한 그것의 각 구성원의 적극적인 최적화를 방지 할 수 있습니다. (그렇지 않으면 객체와 관련된 최적화를 어떻게 피할 수 있습니까?)
관련 주제 :
답변
출처 : http://msdn.microsoft.com/en-us/library/145yc477%28v=vs.80%29.aspx
포인터가 가리키는 객체를 const 또는 volatile로 선언하려면 다음 형식의 선언을 사용하십시오.
const char *cpch;
volatile char *vpch;
포인터의 값, 즉 포인터에 저장된 실제 주소를 const 또는 volatile로 선언하려면 다음 형식의 선언을 사용하십시오.
char * const pchc;
char * volatile pchv;