O membro privado hacking é um comportamento definido?

Eu tenho a seguinte classe:

class BritneySpears
{
  public:

    int getValue() { return m_value; };

  private:

    int m_value;
};

O que é uma biblioteca externa (que não posso mudar). Eu obviamente não posso mudar o valor dem_value, apenas leia. Mesmo derivado deBritneySpears não vai funcionar.

E se eu definir a seguinte classe:

class AshtonKutcher
{
  public:

    int getValue() { return m_value; };

  public:

    int m_value;
};

E então faça:

BritneySpears b;

// Here comes the ugly hack
AshtonKutcher* a = reinterpret_cast<AshtonKutcher*>(&b);
a->m_value = 17;

// Print out the value
std::cout << b.getValue() << std::endl;

Eu sei que isso éruim prática. Mas apenas por curiosidade:isso é garantido para o trabalho? É um comportamento definido?

Pergunta bônus: você já teve que usar um truque tão feio?

Edit: Apenas para assustar menos pessoas: não pretendo realmente fazer isso emreal código. Estava só a pensar ;)

questionAnswers(6)

yourAnswerToTheQuestion