Sahip olursam:
struct whatever {
int data;
};
volatile whatever test;test.datada uçucu
olacak mı?
Sahip olursam:
struct whatever {
int data;
};
volatile whatever test;test.datada uçucu
olacak mı?
Yanıtlar:
Başka bir soru sorulabilir (veya orijinal soruya bakmanın başka bir yolu):
constoluşturmak tüm üyelerini oluşturur constmu?Sahip olursam:
struct whatever { int data; };
const whatever test;
Test.data da olacak constmı?
Cevabım: Evet. Eğer türünde bir nesne bildirirseniz whateverile constsonra tüm üyelerinin olacak constçok
Eğer türünde bir nesne bildirin Benzer şekilde, whateverbirlikte volatilesonra tüm üyelerinin olacak volatilesen nesneyi ilan etmeleri halinde, tıpkı de const, tüm 's üyesi olacaktır constda.
constve volatileaynı madalyonun iki yüzüdür; onlar öyle ki Standart onlara sık sık atıfta bulunur cv-qualifiers.
Standarttan alıntı (7.1.5.1 $ / 8)
[Not: uçucu, uygulama için bir ipucudur nesnenin dahil olduğu agresif optimizasyondan kaçınmak yönelik çünkü nesnenin değeri, bir uygulama tarafından saptanamayan yollarla değiştirilebilir. Ayrıntılı anlamlar için 1.9'a bakın. Genel olarak, uçucu maddenin anlamının C + + 'da C'deki ile aynı olması amaçlanmıştır.]
Bu, nesneniz bir yapı örneğiyse, derleyicinin yapamayacağı anlamına gelir. nesneyi içeren agresif optimizasyonu önlemek , sürece o 's üyelerinin her birinin saldırgan optimizasyonu önler. (Aksi takdirde, nesnenin dahil olduğu optimizasyonu başka nasıl önleyebilir?)
İlgili konu:
Kimden: http://msdn.microsoft.com/en-us/library/145yc477%28v=vs.80%29.aspx
İşaretçi tarafından işaret edilen nesneyi sabit veya uçucu olarak bildirmek için bir form bildirimini kullanın:
const char *cpch;
volatile char *vpch;
İşaretçinin değerini - yani işaretçide depolanan gerçek adresi - sabit veya geçici olarak bildirmek için, formun bir bildirimini kullanın:
char * const pchc;
char * volatile pchv;
volatileüye işlevine sahip olmanın sadecethisişaretçiyi uçucu hale getirdiğini okudum, böylece üyeler her erişildiğinde bellekten okunacak, ancak "resmi olarak" uçucu değiller.