IT story

구조체를 휘발성으로 만들면 모든 멤버가 휘발성이됩니까?

hot-time 2020. 8. 30. 19:48
반응형

구조체를 휘발성으로 만들면 모든 멤버가 휘발성이됩니까?


만약 내가 가지고 있다면:

struct whatever {
int data;
};
volatile whatever test;
test.data역시 변동성이?


다른 질문을 할 수 있습니다 (또는 원래 질문을 보는 다른 방법).

구조체를 const만들면 모든 멤버가 생성 const됩니까?

만약 내가 가지고 있다면:

struct whatever { int data; };

const whatever test;

test.data도 const마찬가지입니까?

내 대답은 : 네. 당신이 형식의 개체를 선언하는 경우 whateverconst모든 회원이 될 것이다 const너무

당신이 형식의 개체를 선언하는 경우 마찬가지로, whatever함께 volatile모든 회원이 될 것입니다 volatile당신이 가진 개체를 선언하는 경우처럼, 너무 const, 모든 그것의 회원이 될 것이다 const너무.

constvolatile동전의 양면이다; 표준에서 종종 cv-qualifiers.


표준에서 인용 ($ 7.1.5.1 / 8)

[참고 : volatile은 객체 의 값이 구현에서 감지 할 수없는 수단으로 변경 될 수 있기 때문에 객체와 관련된 공격적인 최적화를 피하기 위한 구현대한 힌트 입니다. 자세한 의미는 1.9를 참조하십시오. 일반적으로 volatile의 의미는 C에서와 같이 C + +에서 동일합니다.]

개체가 구조체의 인스턴스 인 경우 그 수단은 다음 컴파일러는 할 수없는 객체를 포함하는 공격적인 최적화를 피하기 , 하지 않는 한 그것의 각 구성원의 적극적인 최적화를 방지 할 수 있습니다. (그렇지 않으면 객체와 관련된 최적화를 어떻게 피할 수 있습니까?)


관련 주제 :

왜 C ++에서 volatile 키워드를 사용합니까?


출처 : 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;

참고 URL : https://stackoverflow.com/questions/4479597/does-making-a-struct-volatile-make-all-its-members-volatile

반응형