Приведение типов в c

#c #casting

#c #Кастинг

Вопрос:

 void func::open()
{
 RequestSession* psg = new RequestSession;
((RequestSession*)psg)->st.ProVer = PRO_VERSION; //PRO_VERSION is macro
((RequestSession*)psg)->st.DevID  = DEVICE_ID; //DEVICE_ID is macro
}
  

Я не мог понять, зачем нужно приведение типов еще раз, поскольку psg является указателем класса RequestSession.

Комментарии:

1. Не уверен насчет точного случая, но он мог быть приведен к какому-либо другому типу, но это приведение сохранено для дальнейшего уточнения.

2. Кажется, это не очень проясняет ситуацию, не так ли?:-)

3. У вас также есть утечка памяти…

Ответ №1:

Приведение типов здесь не требуется. Это избыточно и устраняется.

Ответ №2:

Проще говоря, всякий раз, когда вы видите приведение в стиле C в коде C , это неправильно. В очень, очень редких случаях, когда требуется приведение, вам следует использовать static_cast или даже реже reinterpret_cast . Единственное приведение, которое вообще появляется в моем собственном коде, — это dynamic_cast , которое необходимо, когда вам действительно нужно найти тип чего-либо, но это тоже довольно редко.