Qual è lo scopo di una funzione membro volatile
in C++?Qual è lo scopo di una funzione membro volatile in C++?
risposta
EDIT:
Questa risposta è stata inviata quando la questione era di circa la parola chiave volatile. La domanda sembra essere stata cambiata da una terza parte.
ORIGINALE:
volatile informa il compilatore che non deve presumere che il valore è appena messo nella variabile contrassegnata come volatile sarà lì la prossima volta che lo usa ... che deve verificare il valore corrente prima usandolo di nuovo.
Un esempio è se la variabile rappresenta una posizione di memoria che potrebbe essere modificata da un altro processo.
Ecco un esempio (stato secoli da quando ho fatto C++ così ti prego di perdonare eventuali problemi di sintassi minori):
volatile int x;
int DoSomething()
{
x = 1;
DoSomeOtherStuff();
return x+1; // Don't just return 2 because we stored a 1 in x.
// Check to get its current value
}
Questo è corretto. Viene spesso utilizzato in applicazioni incorporate e in tempo reale. – penguin4hire
E dice al compilatore di non eseguire alcuna ottimizzazione su di esso ... – jasonline
@jasonline: dice al compilatore che non deve modificare il numero o l'ordine di letture e scritture e non deve spostare alcuna lettura o scrittura tra i punti di sequenza. Non dice esattamente "non eseguire alcuna ottimizzazione". Ad esempio, i loop che modificano i volatili possono ancora essere srotolati e il codice che accede ai volatili può essere spostato attraverso accessi non volatili. Suppongo che anche l'esecuzione speculativa sarebbe OK, a condizione che tu avessi memoria transazionale hardware e nessun indirizzo magico I/O. –
Per rispondere alla domanda su cosa significa avere un 'funzione membro volatili' (che può o potrebbe non essere ciò che era originariamente previsto dalla persona che ha pubblicato la domanda), contrassegnando una funzione membro come const
o volatile
(o un const volatile
combinato) applica tali qualificatori al puntatore this
utilizzato nella funzione. Come affermato dallo standard (9.2.1 "Il puntatore this
"):
Il tipo di questo in una funzione membro di una
class X
è . Se la funzione membro viene dichiarataconst
, il tipo di questo èconst X*
, se la funzione membro viene dichiaratavolatile
, il tipo dithis
èvolatile X*
, e se la funzione membro viene dichiarataconst volatile
, il tipo di questo èconst volatile X*
.
Così contrassegnando la funzione membro come volatile
si sarebbe essere fare qualsiasi accesso ai membri di dati non statici dell'oggetto all'interno di tale funzione membro come volatile
.
Quindi, in pratica, se 'obj' è' volatile Object * obj', non è possibile richiamare una funzione membro che non sia contrassegnata come 'volatile'. – bobobobo
Non funzione, ma funzione/metodo membro. –
Domanda ricomposta. –
Perché questo è stato rinominato in "parola chiave volatile"? Ci sono funzioni membro volatile. – tiftik