Подтвердить что ты не робот

Должны ли мы предпочесть Boost или стандартную библиотеку?

Я читаю документацию Boost array, и я вижу эту строку:

Если вы используете С++ 11, вам следует использовать std:: array вместо boost:: array

У меня создалось впечатление, что Boost для своих основных библиотек всегда был предпочтительнее стандартного lib, потому что:

  • boost никогда не будет работать хуже, чем стандартный lib
  • boost может предоставить больше возможностей
  • boost наконец-то равен качеству, чем стандартный lib (люди, пишущие стандарт С++, активно развивают разработчиков/супервизоров)
  • основные функции ускорения заканчиваются в стандартной библиотеке через несколько лет.

Итак, я прав, предпочитаю boost над stdlib?

Если нет/сложнее, какое из моих предположений нужно исправить?

4b9b3361

Ответ 1

Я думаю, вы должны использовать стандартный lib, когда он доступен, потому что... он стандартный и поставляется с компилятором. Кроме того, если вы используете boost, вам нужна раздражающая внешняя зависимость.

Итак, мой совет: используйте std, когда это возможно. Если вы пишете переносимый код, который также должен быть скомпилирован старыми компиляторами, вы можете использовать собственное пространство имен (например: cxx0x), которое встраивает std или boost пространство имен в соответствии с используемым вами компилятором (это называется псевдоним пространства имен):

#ifdef COMPILER_HAS_CXX0X
    #include <memory>
    namespace cxx0x = std;
#else
    #include <boost/shared_ptr.hpp>
    namespace cxx0x = boost;
#endif

...

cxx0x::shared_ptr< MyClass > = ...

Ответ 2

Из моего собственного опыта я предпочитаю использовать boost на данный момент. Может быть, это исторический, но я обнаружил, что попытки STD в TR1, которые пришли с VC2008, имели слишком много ошибок, несмотря на все усилия PJ Plauger, он не смог воспроизвести качество проверенного и проверенного кода повышения, который прошел через довольно немного истории.

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

Одна вещь, которую я сейчас выполняю, хотя и объявляет пространство имен псевдонимов, обычно называемое spns, таким образом:

namespace spns = boost;

после чего я могу использовать spns::shared_ptr в течение всего моего кода (spns означает "пространство имен с общим указателем" ), и если мы когда-нибудь перейдем на std, то будет легко перейти в одно место и отредактировать только эту строку и включить.

Когда дело доходит до С++ 11, в Стандарте происходят серьезные изменения, а код повышения - С++ 03. Итак, теперь таблицы, вероятно, будут отображаться для определенных частей библиотеки. Я считаю, что некоторые из более тонких библиотек станут почти устаревшими для С++ 11, например. никто больше не будет использовать boost::lambda, они просто будут использовать новый синтаксис языка для лямбда.

Итак, когда вы переходите на С++ 11, может быть время отказаться от частей библиотеки boost и использовать новые версии.

Ответ 3

Взято из Boost самих людей:

Почему организация должна использовать Boost?

Одним словом, производительность. Использование высококачественные библиотеки, такие как Boost ускоряет начальную разработку, результаты меньше ошибок, уменьшается переосмысление колес и сокращение долгосрочные расходы на техническое обслуживание. И с тех пор Библиотеки ускорения обычно становятся факто или де-юре, многие программисты уже знакомы с их.

Десять из библиотек Boost включен в стандартную библиотеку С++ TR1, и поэтому планируется позднее стандартизация. Дополнительные библиотеки Boost находятся в трубопроводе для TR2. С помощью Библиотеки Boost предоставляют организации начался процесс принятия новых технологии.

Многие организации уже используют программы реализованный с помощью Boost, например Adobe Acrobat Reader 7.0.

Ответ 4

Тенденция, которую я видел в программном обеспечении с открытым исходным кодом, разработанном против С++ 11, - это перенос API-совместимых (подмножество) функций из STD для повышения - потому что поддержка доступна для компиляторов, отличных от С++ 11, где функции std (очевидно) нет.

Хорошим примером этого является mosh.

Для API-совместимых функций это просто вопрос переключения пространств имен. На самом деле, нет причин не делать его вариантом конфигурации, если вы можете.

Боковая панель: если вы привязываетесь к последней версии библиотек повышения, отличных от заголовка, следует предупредить, что некоторые функции больше не доступны, если boost не был скомпилирован с помощью -std=c++11. Недавно я столкнулся с некоторыми функциями в API boost::filesystem.

Ответ 5

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

Многие стандартные функции библиотеки берутся из boost, которые продолжают существовать для поддержки приложения, которое развертывается, когда те функции, где еще не стандартизованы.

Использование boost для стандартизованной функции на самом деле является "взглядом назад". Когда-то это необходимо (может быть, стандартная реализация библиотеки не включает все, что требуется... типично видеть boost:: thread вместо std:: thread на windows из-за того, что std-реализация еще не была перенесена некоторыми компиляторами) но я бы не сделал это правилом.