После просмотра этого вопроса несколько минут назад я задавался вопросом, почему дизайнеры языка допускают это, поскольку это позволяет косвенную модификацию частных данных. В качестве примера
class TestClass {
private:
int cc;
public:
TestClass(int i) : cc(i) {};
};
TestClass cc(5);
int* pp = (int*)&cc;
*pp = 70; // private member has been modified
Я протестировал вышеуказанный код, и действительно личные данные были изменены. Есть ли объяснение, почему это разрешено, или это просто надзор на языке? Кажется, это прямо подрывает использование частных данных.