Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Massima di Renning: L'uomo e' l'animale piu' superiore. L'uomo fa la classificazione.

Anonimo 

Sondaggio:

Windows XP ?...

Un grande affare
Il Sistema Operativo migliore sul mercato
Bello, ma niente di eccezionale
L'ennesima fregatura Microsoft
Una ciofeca peggiore dei suoi predecessori
Preferisco non commentare...

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-2019 Cataldo Sasso