對 volatile 的對象取值和賦值 (幾何畫板開發筆記 二)

問題提出:
   在研究和借鑑 emacs lisp 實現程序時, 有部分值被定義爲 volatile 的, 則對其取值和賦值都有些不一樣,
在 C++ 中. 對象

例子:
   struct Lisp_Object { int i; };   // 這是 lisp 基本對象結構定義. get

   volatile Lisp_Object var, var2;   // 某些地方必須使用 volatile 的變量.
   Lisp_Object arg;       // 大部分是普通變量.
   // 如下取值/賦值產生編譯器錯誤.
   arg = var;   // 編譯器錯誤 C2678: 二進制「=」: 沒有找到接受「volatile Lisp_Object」類型的左操做數的運算符(或沒有可接受的轉換)
   var = arg;   // C2679: 沒有找到接受「volatile Lisp_Object」類型的右操做數的運算符(或沒有可接受的轉換)
   var = var2;   // C2678: 這樣也錯..., 實在很麻煩... 編譯器

 

解決的方法: emacs

    arg = const_cast<const Lisp_Object &>(var);
    const_cast<Lisp_Object &>(var) = arg;
    const_cast<Lisp_Object &>(var) = const_cast<const Lisp_Object &)(var2);  io

最後的那個寫起來很麻煩, 真用起來通常用宏包裝起來... 編譯

 

參見:
http://stackoverflow.com/questions/4644296/cant-assign-an-object-to-a-volatile-object/23441800#23441800 ast

相關文章
相關標籤/搜索