Привет всем!
Вопрос примера навеян разделом из Рихтера ("Windows via C++"), называется раздел "Программа-пример FileCopy". Можете кидать в меня опять тухлыми яйцами, но я все же спрошу. В программе используется структура OVERLAPPED.
Есть такой код, некоторые строки в нем не компилятся (в VS 2010), в комментах указаны сообщения об ошибках:
class MyOverlapped : public OVERLAPPED
{
};
int _tmain(int argc, _TCHAR* argv[])
{
MyOverlapped myov;
MyOverlapped* ov2 = &myov;
OVERLAPPED** ov3;
ov3 = (OVERLAPPED**)(&ov2);
//ov3 = static_cast<OVERLAPPED**>(&ov2); // Error 1 error C2440: 'static_cast' : cannot convert from 'MyOverlapped **' to 'OVERLAPPED **'
//ov3 = &static_cast<OVERLAPPED*>(ov2); // Error 1 error C2102: '&' requires l-value
//ov3 = &(OVERLAPPED*)(ov2);
ov3 = reinterpret_cast<OVERLAPPED**>(&ov2);
return 0;
}
Понятно, что приведение с помощью () компилится и приведение с помощью reinterpret_cast компилится. Но вот почему не компилится первый static_cast?
И можно ли в данном случае обойтись как-то без () и reinterpret_cast? Так как они опасны, я хотела использовать что-то менее жесткое.
Так вот — можно ли без них и если нельзя, то почему?
(То, что этот код странный, я понимаю, меня интересует просто факт компиления/некомпиления).