Il parametro volatile può essere applicato ai parametri, ma non è un fattore di sovraccarico se applicato direttamente al parametro. È tuttavia possibile utilizzarlo per distinguere i tipi di parametro. Per esempio, questo è legale:
void f(int &p) {}; //reference to int
void f(volatile int &p) {}; //reference to volatile int
Questo non è:
void f(int p) {};
void f(volatile int p) {};
La ragione è che nel primo esempio il riferimento non è ciò che è volatile, ma il numero intero. Nel secondo esempio, entrambi i tipi sono numeri interi e quindi dello stesso tipo.
Esistono anche metodi volatili. Sono simili a dichiarare che this
è volatile. Poiché this
è un puntatore e non sono in sé tipo contenente, il seguente è anche legale:
void c::f(int p) {};
void c::f(int p) volatile {};
È lo stesso come per sovraccarichi mediante const
.
Questa parte rilevante dello standard C++ è §13.1 Dichiarazioni sovraccaricabili. Da C++ 11 draft n3290:
Le dichiarazioni dei parametri che differiscono solo per la presenza o l'assenza di const e/o volatile sono equivalenti. Cioè, gli specificatori di tipo const e volatile per ogni tipo di parametro vengono ignorati quando si determina quale funzione viene dichiarata, definita o chiamata. [Esempio:
typedef const int cInt;
int f(int);
int f(const int); // redeclaration of f(int)
int f(int) { /* ... */ } // definition of f(int)
int f(cInt) { /* ... */ } // error: redefinition of f(int)
- esempio fine]
Solo il const e tipo-specificatori volatili al livello più esterno della specifica tipo di parametro vengono ignorati in questo modo; Gli identificatori di tipo const e volatile sepolti all'interno di una specifica del tipo di parametro sono significativi e possono essere utilizzati per distinguere le dichiarazioni di funzioni sovraccariche . In particolare, per qualsiasi tipo T,, pointer to const T
e pointer to volatile T
sono considerati tipi di parametri distinti, come lo sono reference to T
, reference to const T
e reference to volatile T
.
124) Quando un tipo di parametro comprende un tipo di funzione, come ad esempio nel caso di un tipo di parametro che è un puntatore alla funzione, il const e tipo-specificatori volatili al livello più esterno delle specifiche tipo parametro anche il tipo di funzione interna è ignorato.
Aggiunto C++ tag; se questa non è la lingua di cui stai parlando, ti preghiamo di modificare la tua domanda per menzionare quel fatto piuttosto importante e ripeterla in modo appropriato. – Mat
Questo è simile a 'const', Se si dispone di un oggetto qualificato' volatile', su di esso può essere chiamata solo la funzione 'volatile'. –
oh, mi è sfuggito –