Использовать или не использовать C++ 0x функции [дубликат]

11
задан Community 23 May 2017 в 10:24
поделиться

5 ответов

Я бы принимал решение для каждой функции.

Помните, что стандарт действительно близок к завершению. Осталось только голосование, исправление ошибок и еще раз голосование.

Таким образом, такая простая функция, как auto , не исчезнет, ​​и ее семантика не изменится. Так почему бы не использовать это.

Лямбды достаточно сложны, чтобы их формулировка могла быть изменена, а семантика в некоторых угловых случаях немного исправлена, но в целом они будут вести себя так же, как сегодня (хотя VS2010 имеет несколько ошибок. Что касается области захваченных переменных, MS заявила, что они являются ошибками и, как таковые, могут быть исправлены вне основного выпуска продукта).

Если вы хотите перестраховаться, держитесь подальше от лямбд. В противном случае используйте их там, где они удобны, но избегайте сверхсложных случаев или просто будьте готовы проверить использование лямбда, когда стандарт будет окончательно доработан.

Большинство функций можно классифицировать следующим образом: они либо настолько просты и стабильны, что их реализация в GCC / MSVC в точности соответствует тому, как они будут работать в окончательном стандарте, либо они достаточно сложны, чтобы получить было применено несколько исправлений ошибок, и поэтому они могут использоваться сегодня, но вы рискуете столкнуться с несколькими грубыми краями в некоторых пограничных случаях.

Это действительно звучит глупо - избегать возможности C ++ 0x только потому, что они еще не формализованы. Избегайте функций, которые вы не считаете полными, безошибочными и стабильными, но используйте все остальное.

10
ответ дан 3 December 2019 в 03:03
поделиться

Теоретические, но не практические недостатки использования C ++ 0x:

  • затрудняет перенос на разные компиляторы.
  • Не соблюдается ни один опубликованный стандарт.

Практические преимущества использования C ++ 0x:

  • Делает вашу повседневную жизнь проще, а значит, более продуктивной.

Это спор между теоретически правильным и практическим. Если ваша команда намеревается что-то сделать с этим кодом, практические преимущества должны в десять раз перевешивать теоретические.

8
ответ дан 3 December 2019 в 03:03
поделиться

Если вы намереваетесь сделать свою систему с открытым исходным кодом в недалеком будущем, то это аргумент в пользу того, чтобы не использовать слишком много передовых функций. В производственной системе под управлением Debian или Red Hat не обязательно должен быть установлен новейший компилятор.

Вы сказали

, что если мы когда-нибудь портируем базу кода, к тому времени наверняка будут доступны компиляторы с функциями C ++ 0x также для целевой платформы

, но компилятор для платформы существует не всегда означает, что он установлен / используется / требуется, особенно в производственных системах.

Если, с другой стороны, вы собираетесь делать всю компиляцию самостоятельно, это не проблема.

1
ответ дан 3 December 2019 в 03:03
поделиться

Одна вещь, о которой вам (в основном) сейчас не нужно беспокоиться, - это добавление или удаление функций, потому что рабочий проект достиг " Final Committee Draft " (FCD) еще в марте. Функциональность должна быть заморожена, комитет по стандартам больше не будет принимать предложения по C ++ 0x.

Обратной стороной является то, что это все еще черновик и еще не доработанный, комитет по стандартам находится на стадии внесения исправлений и корректировок перед окончательной доработкой и публикацией стандарта ISO (релиз ожидается в марте 2011 г.). Это может означать незначительные синтаксические или семантические / поведенческие изменения, которые могут сделать ваш код не компилируемым или некорректным после компиляции с компилятором, который более совместим со стандартами, чем тот, который вы использовали во время написания кода.

Вам, вероятно, придется когда-нибудь подождать, пока компиляторы, такие как VC ++ 10, получат обновление с внесенными исправлениями / корректировками.

7
ответ дан 3 December 2019 в 03:03
поделиться

У нас была точно такая же проблема, поэтому мы пошли на компромисс. Мы взяли версию C ++ 0x TR1, а затем взяли только те части, которые, как мы знали, хотели использовать. Похоже, много работы, но пока все хорошо. Мы используем библиотеки регулярных выражений, кортежи и несколько других. Как только стандарт будет ратифицирован, мы перейдем на полную версию C ++ 0x. Очевидно, это не лучшее решение, но оно хорошо сработало для нас.

3
ответ дан 3 December 2019 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: