Это касается исходного кода статистической системы машинного перевода. Моисей.
в Factor
класс Проект Mosesdecoder, есть это странное использование ключевого слова 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
является Вот. я знаю это mutable
используется, когда вы хотите изменить вариант члена в константной функции-члене или когда вы хотите изменить некоторую переменную вне области видимости в лямбда-выражении. Я, однако, не понимаю, что mutable
делает в этом коде.
Я ценю любой намек. Спасибо.
Вы предоставили достаточно мало информации, и все, что мы можем сделать, — это угадать.
Тем не менее, из комментария кажется, что у них есть какой-то пул хранения, и они могут захотеть переместить хранилище для строки в пул хранения. Как и в большинстве случаев mutable
, это имеет дело с побитовой модификацией, которая все еще оставляет объект логически неизмененным (то есть, они изменяют указатель так, чтобы он указывал на те же данные, но по другому адресу).
Других решений пока нет …