2011-11-08 15 views
5

Perché un oggetto volatile non può chiamare una funzione membro non volatile?perché un oggetto volatile non può chiamare la funzione membro non volatile

In caso di const, ha senso che chiamare una funzione membro non const viola la constness del dell'oggetto e quindi è vietato. Ma perché nel caso di volatile?

+1

perché si sta cercando di violare volatili correttezza ... –

+2

e ho appena notato l'anagramma –

risposta

4

In caso di const, ha senso che il richiamo di una funzione membro non-const viola la costanza dell'oggetto e quindi è vietato. Ma perché nel caso di volatile?

È lo stesso per volatile. Volatile significa che ogni accesso a un oggetto è un effetto collaterale visibile e non può essere eliminato. Se si chiama un metodo non volatile su un oggetto volatile, si violerebbe questa proprietà (poiché il metodo non volatile considererebbe l'oggetto solo come un oggetto normale). Pertanto, è impossibile.

2

Il qualificatore volatile funziona molto allo stesso modo di const funziona. Per vedere cosa può fare grazie a questo, dare un'occhiata a this Alexandrescu article. Questo articolo dovrebbe anche darti un'idea dello perché.

+0

si tratta di un articolo del 2001 e tutto ho letto ora è la gente consulenza contro volatile per sezione critica/scopi multithreaded e preferiscono utilizzare i mutex . Ad esempio: https://www.securecoding.cert.org/confluence/display/seccode/POS03-C.+Do+not+use+volatile+as+a+synchronization+primitive – Nikko

+0

@Nikko: Sembra che tu non abbia leggere più del titolo dell'articolo a cui si fa riferimento nella risposta. Leggi l'articolo * completo *. – ybungalobill

4

dalla norma:

7.1.5.1. Se si tenta di fare riferimento a un oggetto definito con un tipo volatile-quailificato tramite l'uso di un lvalue con un tipo quailificato non volatile , il comportamento del programma non è definito.

Sto supponendo che il tuo compilatore presenti un errore per prevenire un comportamento non definito. Lo standard afferma quindi dovrebbe essere una ragione sufficiente.

+0

Penso che la domanda sia "perché" –

+0

bella scoperta dalle specifiche. – iammilind

+0

@ TomalakGeret'kal perché lo standard dice così :) –

Problemi correlati