4
這是關於統計機器翻譯系統Moses的源代碼。 在Factor
類Mosesdecoder project,的有這種怪用關鍵字mutable
的:Moses源代碼中的關鍵字mutable是什麼?
class Factor {
__SOME_OTHER_CODE__
// FactorCollection writes here.
// This is mutable so the pointer can be changed to pool-backed memory.
mutable StringPiece m_string
size_t m_id;
__SOME_OTHER_CODE__
}
的Factor.h
完整的文件是here。我知道mutable
用於當你想修改一個const成員函數中的成員變體,或者當你想修改lambda表達式中的一些超出範圍的變量時。但是,我不明白mutable
在這段代碼中的作用。
我欣賞任何提示。謝謝。
感謝您的快速回復。這個'm_string'由另一個類修改。我通常會看到一個成員函數在同一個類中修改由'mutable'標記的成員變量。這就是我感到奇怪的原因。 –
@YuhuanJiang:如果它是一個「池」,可能會有某種池管理器「進入」來修改'm_string':例如,如果池解除分配,可能會將m_string設置爲空,或者下次訪問時拋出異常。您沒有提供有關您所看到的內容,期望的內容以及差異之所以令人困惑的原因。 –
@YuhuanJiang:'mutable'的主要目的是允許通過'const'引用或指針修改對象的可變字段。只要對象保持_logic_常量,這通常是安全的。例如,如果'm_string'所保存的字符串沒有改變,那麼'm_string'的內部表示是否改變並不重要。通過外觀,「m_string」保持不變。在這個例子中,看起來有些內存管理代碼可能想移動存儲字符串文本的位置而不改變該文本。這是「邏輯常量」。 –