gnu c ++ 0x статус обратной совместимости - могу ли я просто включить его и перейти? - PullRequest
5 голосов
/ 26 марта 2011

У меня довольно большая база кода на C ++ (не написана самостоятельно). Многочисленные библиотеки, некоторые не настолько синтаксически тяжелые, некоторые чрезвычайно. Среди прочего интенсивное использование Boost, немного Eigen.

Мне просто нравятся некоторые новые функции 0x, и быстрая компиляция / тестирование говорит мне, что все это хорошо. Этот вопрос , и этот предполагают, что есть некоторые вещи, которые пахнут смешно.

Мое текущее состояние:

  • gcc4.4.3
  • libstc ++ 6-4.4
  • наддув 1,40
  • eigen 3.0 - beta3

с использованием флага std=c++0x.

Я знаю, что комитет по стандартизации мучился из-за обратной совместимости и перенес серьезную боль. Мой вопрос, это сработало? Могу ли я взять весь этот код, включить c ++ 0x и быть уверенным, что все не только компилируется, но и работает как положено?

Я не использую магию с высоким 0x, просто auto и некоторые обычные фавориты, явно помеченные как "реализованные" в GNU C ++ 0x status .

Ответы [ 3 ]

3 голосов
/ 26 марта 2011

Я бы определенно рекомендовал использовать GCC 4.5, так как он содержит больше исправлений ошибок и более надежную реализацию новейшего C ++ 0x.

Что касается связанных с вами вопросов:

  1. Это просто определение типа на новой платформе.Не беспокойтесь об этом, это ничего не сломает и не будет трудно исправить.

  2. Это одна из более сложных функций C ++ 0x, но она не должна иметьэто сильно влияет на обратную совместимость (кроме случаев, когда boost пытается взломать себя на функцию, которая должна стать функцией компилятора / языка).

Единственный реальный способ проверить, есть лиявляются проблемы, это включить флаг компилятора и посмотреть, если какие-либо проблемы всплывают.А еще лучше, включите полноценные предупреждения (по крайней мере, в GCC, MSVC имеет некоторые неприятные проблемы в этом отношении), чтобы обнаружить как можно больше извращенных проблем.Это не водонепроницаемый, хотя.Возможно, вы захотите использовать разные компиляторы (GCC / MSVC / Intel / Clang) для перекрестной проверки совместимости, но в случае c ++ 0x вы будете очень ограничены общим подмножеством компиляторов, которые вы используете для проверки.В настоящее время я широко использую C ++ 0x и намереваюсь исправить любые проблемы, возникающие при реализации окончательного стандарта.

2 голосов
/ 26 марта 2011

На ваш вопрос нет ответа, это зависит от вашего кода. Попробуйте скомпилировать, исправить проблемы во время компиляции. После компиляции запустите тесты и исправьте все, что нужно исправить.

Если у вас нет тестового кода, начните там.

1 голос
/ 26 марта 2011

На это невозможно ответить без знания кодовой базы.В частности, при 100% обратной совместимости вы можете обнаружить те же проблемы, что и при обновлении / изменении компилятора в рамках одного и того же стандарта:

Если ваш код не является стандартным, если он использует функции, специфичные длякомпилятор или версия, если он имеет какой-либо экземпляр неопределенного поведения или зависит от неопределенного поведения, которое просто работает на вашей текущей платформе, тогда если он может не скомпилироваться (если вам повезет) или продемонстрировать другое поведение во время выполнения (если вы неповезло).

...