[С++] Вопрос про приведения типов
От: XJess  
Дата: 01.06.11 14:03
Оценка:
Привет всем!
Вопрос примера навеян разделом из Рихтера ("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? Так как они опасны, я хотела использовать что-то менее жесткое.

Так вот — можно ли без них и если нельзя, то почему?

(То, что этот код странный, я понимаю, меня интересует просто факт компиления/некомпиления).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.