InterlockedIncrement和其他互鎖操作將其參數聲明爲volatile。爲什麼?這是什麼意圖和影響?聲明爲volatile的InterlockedIncrement參數有什麼影響
3
A
回答
8
可能的影響是非常小的。最可能的意圖是允許用戶將volatile
限定變量傳遞給這些函數,而不需要類型轉換。
-1
-2
總之,易變意味着「這個變量可能會在此程序之外被修改」。
更多的話來說,這意味着變量的值可以在代碼中沒有任何相關指令的情況下更改。例如,它常用於低級I/O,其中寄存器或緩衝區的值可由硬件設置。
3
這樣做是爲了可以在正常變量和易失性變量上調用該函數。你不能將一個volatile變量傳遞給一個不期待volatile參數的函數。下面的代碼無法編譯(與Visual Studio 2005 C++編譯器進行測試):
void TestV(int *a)
{
*a = 1;
}
void Test()
{
volatile int a = 0;
TestV(&a);
}
該宣言是它是什麼,你可以做以下操作:
volatile LONG a = 0;
InterlockedIncrement(&a);
因爲它最有可能有一個感覺要在volatile變量上調用InterlockedIncrement,將它聲明爲這樣似乎是明智的。
相關問題
- 1. 在非成員函數聲明的開頭有什麼影響?
- 2. 將方法聲明爲final是什麼影響?
- 3. [HTML文檔類型聲明]:爲什麼我們需要聲明和聲明是否影響樣式?
- 4. C - sprintf()影響數組聲明
- 5. 爲什麼「volatile」需求聲明 - 僅從數組定義一致性?
- 6. 爲什麼模板聲明中的size_t參數需要爲const?
- 7. 爲什麼圓弧角沒有影響
- 8. 爲什麼.not()沒有任何影響?
- 9. 爲什麼CefSharp.WebBrowserExtensions.SetZoomLevel影響所有實例?
- 10. 爲什麼C++模板參數應該聲明爲類類型?
- 11. 爲什麼`color`影響陰影根?
- 12. DataFrame.loc()對數據框有什麼影響?
- 13. PBEKeySpec iterationCount和keyLength參數有什麼影響?
- 14. 爲什麼Reads沒有聲明協變?
- 15. 爲什麼明確的回報會影響Proc?
- 16. 不明白爲什麼我的輸入不會影響Python 3
- 17. 爲什麼CSS不透明度會影響div上方的div?
- 18. 聲明一個對象是volatile的
- 19. 爲什麼在括號外聲明參數類型?
- 20. 爲什麼default-template參數不能使用聲明?
- 21. 爲什麼命令行參數聲明導致分段錯誤
- 22. 爲什麼在聲明時執行Button參數「command」?
- 23. 什麼時候'void'方法影響參數?它何時影響原始對象?
- 24. 高斯噪聲對圖像直方圖有什麼影響?
- 25. 是否有任何理由在C中聲明「volatile const」,但在C++中只聲明「volatile」?
- 26. 將函數的參數聲明爲final:爲什麼以及何時需要?
- 27. 更新聲明對我的表沒有任何影響
- 28. 如果聲明似乎沒有影響我的代碼。
- 29. JS函數聲明:在參數聲明
- 30. 爲什麼ng-click對ng函數沒有影響?
我對這個http://groups.google.com/group/comp.programming.threads/tree/browse_frm/thread/1fa4a82dda916b18/a886def5998f9b82?rnum=21&_done=%2Fgroup%2Fcomp.programming發現了激烈的爭論。線程%2Fbrowse_frm%2Fthread%2F1fa4a82dda916b18%2Ffd6be8f0b18bd62d%3F#doc_5d933de5ad5378cf - 在那裏沒有結論,但有詳細的解釋,爲什麼揮發性不會做什麼人會一見鍾情。 – Suma 2010-09-14 11:18:05
你可能也想看看[這個問題]的答案(http://stackoverflow.com/questions/3604569/what-kinds-of-optimizations-does-volatile-prevent-in-c)。 – sbi 2010-09-14 13:10:29