Se eu tiver:
struct whatever {
int data;
};
volatile whatever test;
será test.data
volátil também?
Se eu tiver:
struct whatever {
int data;
};
volatile whatever test;
será test.data
volátil também?
Respostas:
Outra pergunta pode ser feita (ou simplesmente outra maneira de ver a pergunta original):
const
torna todos os seus membros const
?Se eu tiver:
struct whatever { int data; };
const whatever test;
O test.data const
também será ?
Minha resposta é: sim. Se você declarar um objeto do tipo whatever
com const
, em seguida, todos os seus membros será const
muito
Da mesma forma, se você declarar um objeto do tipo whatever
com, volatile
então todos os seus membros serão volatile
também, assim como se você declarar o objeto com const
, todos os seus membros também serão const
.
const
e volatile
são duas faces da mesma moeda; eles são de modo que o Padrão freqüentemente se refere a eles como cv-qualifiers
.
Citando do padrão ($ 7.1.5.1 / 8)
[Nota: volatile é uma dica para a implementação para evitar otimização agressiva envolvendo o objeto porque o valor do objeto pode ser alterado por meios indetectáveis por uma implementação. Veja 1.9 para semântica detalhada. Em geral, a semântica de volátil deve ser a mesma em C ++ e em C.]
Isso significa que, se o seu objeto é uma instância de uma estrutura, o compilador não pode evitar a otimização agressiva envolvendo o objeto , a menos que evite a otimização agressiva de cada um de seus membros. (Caso contrário, de que outra forma ele pode evitar a otimização envolvendo o objeto?)
Tópico relacionado:
De: http://msdn.microsoft.com/en-us/library/145yc477%28v=vs.80%29.aspx
Para declarar o objeto apontado pelo ponteiro como const ou volátil, use uma declaração do formulário:
const char *cpch;
volatile char *vpch;
Para declarar o valor do ponteiro - ou seja, o endereço real armazenado no ponteiro - como const ou volátil, use uma declaração no formato:
char * const pchc;
char * volatile pchv;
volatile
função de membro apenas torna othis
ponteiro volátil, portanto, os membros serão lidos da memória cada vez que forem acessados, mas não são "oficialmente" voláteis.