У меня есть экземпляры класса, которые используются с ключевым словом volatile и без него:
class C {};
volatile C v_c;
C nv_c;
Теперь я придумал следующую конструкцию для написания методов, которые работают как для энергозависимых, так и для энергонезависимых экземпляров. :
class C {
public:
void method() { methodQualified(false); };
void method() volatile { methodQualified(); };
private:
void methodQualified(bool volatileSelf = true) volatile {
auto& nqThis = volatileSelf ? *this : *const_cast<C*>(this);
// Do stuff with nqThis
}
};
Но теперь мне интересно, изменит ли / как вызов methodQualified(false)
изменение поведения компиляторов для вызовов методов в энергозависимых / энергонезависимых экземплярах. Имеет ли эта конструкция смысл? Основная идея состоит в том, чтобы иметь потенциальное снижение производительности при использовании volatile только в случае необходимости. Это код, написанный для Arduino.