Jeżeli mam:
struct whatever {
int data;
};
volatile whatever test;
będzie test.dataniestabilny?
Jeżeli mam:
struct whatever {
int data;
};
volatile whatever test;
będzie test.dataniestabilny?
Odpowiedzi:
Można zadać inne pytanie (lub po prostu spojrzeć na pierwotne pytanie w inny sposób):
consttworzy wszystkich jej członków const?Jeżeli mam:
struct whatever { int data; };
const whatever test;
Czy test.data constteż będzie ?
Moja odpowiedź brzmi: tak. Jeśli zadeklarować obiekt typu whateverz constczym wszyscy jej członkowie będą constzbyt
Podobnie, jeśli zadeklarujesz obiekt typu whateverz, volatilewówczas wszystkie jego elementy będą volatilerównież, tak jak w przypadku zadeklarowania obiektu z const, wszystko, co jest składnikiem , też będzie const.
consti volatilesą dwiema twarzami tej samej monety; są tak, że standard często określa je jako cv-qualifiers.
Cytowanie ze standardu (7,1,5,1 / 8 USD)
[Uwaga: zmienna jest wskazówką do implementacji, aby uniknąć agresywnej optymalizacji obejmującej obiekt, ponieważ wartość obiektu może zostać zmieniona w sposób niewykrywalny przez implementację. Zobacz 1.9 dla szczegółowej semantyki. Ogólnie rzecz biorąc, semantyka zmiennej lotnej ma być taka sama w C ++, jak w C.]
Oznacza to, że jeśli Twój obiekt jest instancją struktury, to kompilator nie może uniknąć agresywnej optymalizacji obejmującej obiekt , chyba że unika agresywnej optymalizacji każdego z jego elementów członkowskich. (W przeciwnym razie, jak inaczej można uniknąć optymalizacji obejmującej obiekt?)
Temat pokrewny:
Od: http://msdn.microsoft.com/en-us/library/145yc477%28v=vs.80%29.aspx
Aby zadeklarować obiekt wskazywany przez wskaźnik jako stały lub nietrwały, użyj deklaracji postaci:
const char *cpch;
volatile char *vpch;
Aby zadeklarować wartość wskaźnika - czyli rzeczywisty adres przechowywany we wskaźniku - jako stałą lub nietrwałą, użyj deklaracji postaci:
char * const pchc;
char * volatile pchv;
volatilefunkcji składowej sprawia, żethiswskaźnik jest nietrwały, więc elementy członkowskie będą odczytywane z pamięci za każdym razem, gdy będą uzyskiwane, ale nie są „oficjalnie” ulotne.