[問題] volitile 在語言上的需求
volatile 關鍵字很少被討論
一般而言是使用在禁止 compiler 做對記憶體的最佳化
舉例來說,一個 system call 的參數通常會設定為 volatile
如此一來, inter-procedural optimization 的 constant propagation 就
不會建立 clone function,或者是利用 calling convention 來偷偷刪除參數
小弟不才我有個疑問,就是為什麼宣告為 volatile 的物件
所有的接口都必須要有 volatile 關鍵字
在 function call 當 parameter 很容易理解
但是如果是在同一個 function 裡面,例如這樣寫
#define MAX_SIZE 100
template<typename DataType>
class A
{
private:
DataType volatile m_Data[MAX_SIZE];
public:
void f( int index ) {
**** DataType *ptr = &(m_Data[index]);
... do some operation on ptr ...
}
};
compiler 會說 **** 那行會出錯,因為 ptr 沒有 volatile 關鍵字
解決方法就是利用 const_cast 去除 volatile modifier
為什麼 compiler 一定需要 volatile 關鍵字才讓我轉型
不轉型會死嗎? 在語言上有甚麼樣的 cast,如果沒有轉型會造成錯誤呢?
還請板上高手幫小弟解惑
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.104.108.86
推
07/30 03:06, , 1F
07/30 03:06, 1F
→
07/30 03:06, , 2F
07/30 03:06, 2F
→
07/30 03:06, , 3F
07/30 03:06, 3F
→
07/30 03:07, , 4F
07/30 03:07, 4F
→
07/30 03:08, , 5F
07/30 03:08, 5F
→
07/30 03:08, , 6F
07/30 03:08, 6F
→
07/30 03:17, , 7F
07/30 03:17, 7F
→
07/30 03:17, , 8F
07/30 03:17, 8F
→
07/30 03:18, , 9F
07/30 03:18, 9F
→
07/30 03:19, , 10F
07/30 03:19, 10F
→
07/30 03:27, , 11F
07/30 03:27, 11F
→
07/30 03:30, , 12F
07/30 03:30, 12F
→
07/30 08:15, , 13F
07/30 08:15, 13F
→
07/30 08:17, , 14F
07/30 08:17, 14F
→
07/30 08:19, , 15F
07/30 08:19, 15F
推
07/30 16:16, , 16F
07/30 16:16, 16F
→
07/30 16:17, , 17F
07/30 16:17, 17F
→
07/30 23:50, , 18F
07/30 23:50, 18F
→
07/30 23:51, , 19F
07/30 23:51, 19F
→
07/30 23:51, , 20F
07/30 23:51, 20F
→
07/30 23:51, , 21F
07/30 23:51, 21F
推
07/31 00:25, , 22F
07/31 00:25, 22F
→
07/31 00:26, , 23F
07/31 00:26, 23F
推
07/31 00:56, , 24F
07/31 00:56, 24F
推
07/31 01:02, , 25F
07/31 01:02, 25F
→
07/31 01:02, , 26F
07/31 01:02, 26F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):