Есть ли приемлемый способ в С++ для дифференциации ссылок на константные ссылки на неизменяемые объекты по сравнению с изменчивыми?
например.
class DataBuffer {
// ...
};
class Params {
// ...
};
class C {
public:
// Given references must be valid during instance lifetime.
C(const Params& immutableParameters, const DataBuffer& mutableDataBuffer) :
m_immutableParameters{immutableParameters},
m_mutableDataBuffer{mutableDataBuffer}
{
}
void processBuffer();
private:
const Params& m_immutableParameters;
const DataBuffer& m_mutableDataBuffer;
};
Здесь семантическая разница дается именно в именах.
Проблема в том, что переменные экземпляра const&
позволяют вам знать, что объект не будет изменен экземпляром. В интерфейсе нет различий, могут ли они быть изменены в другом месте, что, по моему мнению, является полезной функцией, которую можно описать в интерфейсе.
Выражение этого с помощью системы типов поможет сделать интерфейсы более понятными, позволяя компилятору поймать ошибки (например, случайное изменение параметров, переданных экземпляру C
, вне экземпляра, в примере выше) и, возможно, помощь с оптимизация компилятора.
Предполагая, что ответ заключается в том, что различие невозможно в С++, может быть, есть что-то близкое, которое может быть достигнуто с помощью некоторых масок шаблонов?