Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Non dire mai bugie, a meno che non sia assolutamente conveniente.

Anonimo 

Sondaggio:

Quale auto per non passare inosservati?

Jaguar
Mercedes
Ferrari
Maserati
Bmw
AlfaRomeo
Bugatti

visualizza risultati


 

Membri volatile

Il C++ e` un linguaggio adatto a qualsiasi tipo di applicazione, in particolare a quelle che per loro natura si devono interfacciare direttamente all'hardware. Una prova in tal proposito e` fornita dalla keyword volatile che posta davanti ad un identificatore di variabile comunica al compilatore che quella variabile puo` cambiare valore in modo asincrono rispetto al sistema:


  volatile int Var;

  /* ... */
  int B = Var;
  int C = Var;
  /* ... */


In tal modo il compilatore non ottimizza gli accessi a tale risorsa e ogni tentativo di lettura di quella variabile e` tradotto in una effettiva lettura della locazione di memoria corrispondente.
Gli oggetti volatile sono normalmente utilizzati per mappare registri di unita` di I/O all'interno del programma e per essi valgono le stesse regole viste per gli oggetti const; in particolare solo funzioni membro volatile possono essere utilizzate su oggetti volatile e non si possono dichiarare volatile costruttori e distruttori (che sono comunque utilizzabili sui tali oggetti):


  class VolatileClass {
    public:
      VolatileClass(int ID);
      long int ReadFromPort() volatile;
      /* ... */

    private:
      volatile long int ComPort;
      const int PortID;
      /* ... */
  };

  VolatileClass::VolatileClass(int ID) : PortID(ID) {}

  long int VolatileClass::ReadFromPort() volatile {
    return ComPort;
  }


Si noti che volatile non e` l'opposto di const: quest'ultima indica al compilatore che un oggetto non puo` essere modificato indipendentemente che sia trattato come una vera costante o una variabile a sola lettura, volatile invece dice che l'oggetto puo` cambiare valore al di fuori del controllo del sistema; quindi e` possibile avere oggetti const volatile. Ad esempio unita` di input, come la tastiera, possono essere mappati tramite oggetti dichiarati const volatile:


  class Keyboard {
    public:
      Keyboard();
      const char ReadInput() const volatile;
      /* ... */

    private:
      const volatile char* Buffer;
  };

 

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2009 Cataldo Sasso