Jika saya memiliki:
struct whatever {
int data;
};
volatile whatever test;
akan test.databergejolak juga?
Jika saya memiliki:
struct whatever {
int data;
};
volatile whatever test;
akan test.databergejolak juga?
Jawaban:
Pertanyaan lain dapat ditanyakan (atau cara lain untuk melihat pertanyaan asli):
constmembuat semua anggotanya const?Jika saya memiliki:
struct whatever { int data; };
const whatever test;
Akankah test.data constjuga?
Jawaban saya adalah: Ya. Jika Anda menyatakan objek tipe whateverdengan constmaka semua anggotanya akan constterlalu
Demikian pula, jika Anda mendeklarasikan objek bertipe whateverwith volatilemaka semua anggotanya akan menjadi volatilejuga, seperti jika Anda mendeklarasikan objek dengan const, semua anggotanya juga akan menjadi const.
constdan volatiledua wajah dari mata uang yang sama; mereka sehingga Standar sering menyebutnya sebagai cv-qualifiers.
Mengutip dari Standar ($ 7.1.5.1 / 8)
[Catatan: volatile adalah petunjuk implementasi untuk menghindari pengoptimalan agresif yang melibatkan objek karena nilai objek dapat diubah dengan cara yang tidak terdeteksi oleh implementasi. Lihat 1.9 untuk semantik rinci. Secara umum, semantik volatile dimaksudkan agar sama di C + + seperti di C.]
Artinya, jika objek Anda adalah instance dari struct, maka compiler tidak dapat menghindari pengoptimalan agresif yang melibatkan objek tersebut , kecuali jika menghindari pengoptimalan agresif dari setiap anggotanya. (Jika tidak, bagaimana lagi itu dapat menghindari pengoptimalan yang melibatkan objek?)
Topik terkait:
Dari: http://msdn.microsoft.com/en-us/library/145yc477%28v=vs.80%29.aspx
Untuk mendeklarasikan objek yang ditunjukkan oleh pointer sebagai const atau volatile, gunakan deklarasi dalam bentuk:
const char *cpch;
volatile char *vpch;
Untuk mendeklarasikan nilai pointer - yaitu, alamat sebenarnya yang disimpan di pointer - sebagai const atau volatile, gunakan deklarasi dalam bentuk:
char * const pchc;
char * volatile pchv;
volatilefungsi anggota hanya membuatthispenunjuk mudah menguap, jadi anggota akan dibaca dari memori setiap kali mereka diakses tetapi tidak "secara resmi" mudah berubah.