Общий вопрос , который может представлять интерес для других:
Я столкнулся с, как мне кажется, проблемой C ++ - оптимизации компилятора (Visual Studio 2005) с оператором switch. Я хотел бы знать, есть ли способ удовлетворить моё любопытство и выяснить, что компилятор пытается, но не может сделать. Могу ли я потратить какое-то время (возможно, слишком много) на расшифровку журнала?
Моя конкретная проблема для тех, кому достаточно любопытно продолжить чтение - я хотел бы услышать ваши мысли о том, почему у меня возникают проблемы в этом конкретном случае.
У меня есть крошечная программа с примерно 500 строками кода, содержащим оператор switch. Некоторые из его случаев содержат некоторое назначение указателей.
double *ptx, *pty, *ptz;
double **ppt = new double*[3];
//some code initializing etc ptx, pty and ptz
ppt[0]=ptx;
ppt[1]=pty; //<----- this statement causes problems
ppt[2]=ptz;
Кажется, что в среднем выражении зависает компилятор. Компиляция никогда не заканчивается. Хорошо, я не стал ждать дольше, чем нужно, чтобы пройтись по коридору, поговорить с некоторыми людьми, взять чашку кофе и вернуться к моему столу, но это крошечная программа, которая обычно собирается менее чем за секунду. Удалите одну строку (указанную в приведенном выше коде), и проблема исчезнет, как и при удалении оптимизации (для всей программы или с использованием #pragma в функции).
Почему эта средняя линия вызывает проблемы? Оптимизатору компиляторов не нравится pty.
В программе нет разницы в векторах ptx, pty и ptz. Все, что я делаю для pty, я делаю для ptx и ptz. Я попытался поменять их позиции в ppt, но pty все еще оставалась линией, вызывающей проблему.
Я спрашиваю об этом, потому что мне интересно, что происходит. Код переписан и работает нормально.
Edit:
Почти две недели спустя я проверяю наиболее близкую версию к коду, который я описал выше, и я не могу отредактировать его обратно, чтобы он вылетел. Это действительно раздражает, смущает и раздражает. Я попробую еще раз, но если в ближайшее время это не сломается, думаю, эта часть вопроса устарела, и я ее уберу. Очень жаль, что вы нашли время.