2011-10-13 29 views
0

如果你有一個類成員函數標記爲volatile,是否有可能在類成員中使用該函數時拋棄volatile?你可以拋棄易失性函數中的成員揮發性>

+2

顯示一些代碼人。 – deepmax

+0

相關:http://stackoverflow.com/questions/7367580/c-c-casting-away-volatile-considered-harmful – Mat

+2

真正的問題是爲什麼?你有代碼說明一個問題,需要你擺脫易變? –

回答

4

是的。爲了拋棄物體的揮發性,使用了const_cast

T & t = const_cast<T&>(volatile_t); 

這就是這樣。但是,不管你是否應該在你的代碼中使用它,我都不能說沒有看代碼。一般來說,拋棄常量和易失性是一個危險的想法,只有在仔細檢查所有情況之後才能做到。

+0

與任何常數一樣,如果您不遵守常數或波動性保證提供的合約,您可能會遇到未定義的行爲。演員只能作爲其他固定代碼的解決方案;例如,如果你知道一個函數不是在修改引用,而是用非const引用來聲明的。 Const-cast不會*神奇地創建一個可變對象! –

0

您可以使用const_cast從任何上下文丟棄volatile。你正在精確地詢問在volatile成員內部投射,但這沒有什麼區別。

函數中的volatile是檢查告訴編譯器如果試圖調用一個volatile對象上(或或通過引用指針volatile對象)方法,它是無關的volatile -ness不抱怨的成員。

我想說的是,如果你希望在訪問數據成員與volatile語義一致的行爲,只是因爲的代碼是一個volatile成員方法,就不會發生這裏面。