использование c ++ 0x - безопасно? - PullRequest
0 голосов
/ 05 января 2012

Я хотел использовать хэш-карту stl, и, как среди прочего, я обнаружил, что в c ++ его нет, но в c ++ 0x он есть, так что, как и тот, кто не устарел, он безопасен в использовании c ++ 0x. ? (Он уже полностью протестирован и на него можно полагать, что он не содержит ошибок?). Если это так - кажется, что есть много новых версий (c ++ 11) - если я буду использовать их, или, возможно, они все еще недостаточно надежны. Во всяком случае, когда я пытаюсь использовать что-то из нового интерфейса, мой компилятор Linux говорит мне, что я должен включить c ++ 0x - так что я думаю, что мой компилятор не обновлен enoug

Ответы [ 4 ]

6 голосов
/ 05 января 2012

C ++ 0x было рабочим названием C ++ 11.

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

Короче говоря: GCC значительно опередил весь пакет, но все еще не имеет 100% возможностей. Некоторые вещи , такие как пользовательские литералы , еще не поддерживаются ни одним компилятором. ( Редактировать: Я не уверен, но я думаю, что некоторые особенности регулярных выражений и модели атомарной памяти попадают в эту категорию.) Существенные функции, такие как ссылки на rvalue, широко завершены.

std::unordered_map был представлен C ++ 03 TR1 и поддерживается всеми реализациями C ++ 11, а также всеми современными реализациями C ++ 03 через их библиотеки TR1, даже без поддержки языка C ++ 11. В TR1 шаблон называется std::tr1::unordered_map, и для включения TR1 может потребоваться выполнить какой-то определенный для платформы шаг, например, добавить некоторый подкаталог tr1/ в пути поиска включаемых файлов.

2 голосов
/ 05 января 2012

Да, это должно быть безопасно. Но - как вы уже видели - только часть стандарта C ++ 11 реализована в различных компиляторах. Попробуйте получить новейший gcc, он реализует большинство функций C ++ 11: http://gcc.gnu.org/projects/cxx0x.html

1 голос
/ 05 января 2012

C ++ 0x отсутствует. Это было рабочее название для того, что наконец стало C ++ 11 12 августа 2011 года.

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

Теперь частный случай std::unordered_map, он был впервые стандартизирован в C ++ TR1 , но произошел задолго до этого в boost . Большинство компиляторов, которые не поддерживают C ++ 11, поддерживают TR1, поэтому std::tr1::unordered_map будет там, и вы всегда можете взять его с наддува для тех, кто этого не делает.

Что касается gcc, ошибка в том, что вам нужно включить C ++ 11. Это делается простым добавлением опции -std=c++0x в командную строку компилятора. Это сделано для того, чтобы вы случайно не использовали функцию C ++ 11 в коде, который все еще заботится о переносимости в компиляторы C ++ 03.

1 голос
/ 05 января 2012

Предполагается, что он безопасен для не критически важных приложений.Я думаю, что пока нет критичного по безопасности компилятора с поддержкой C ++ 0x.

Но для настольных приложений у вас не должно быть проблем с этим.Но обратите внимание, что всего несколько компиляторов поддерживают C ++ 0x (afak gcc 4.6+ и VC 2010), и они не поддерживают все функциональные возможности.Важно, чтобы вы прочитали спецификации компилятора, чтобы проверить, что они поддерживают, а что нет.

Я бы предпочел дождаться более новой версии этих компиляторов, чтобы использовать ее в коммерческих приложениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...