2010-09-17 7 views
2

Так что я пытался сделать некоторые исследования и хотел бы, чтобы мнения других разработчиков по этой теме. Я опытный программист на C++ и уже некоторое время использую текущий стандарт C++. Я читал статьи, что «C++ 0x, несомненно, станет новым стандартом». Как далеко мы все думаем, чтобы переключиться на совершенно новый стандарт программирования? Кроме того, что, на ваш взгляд, является лучшим стандартом? Насколько я понимаю, C++ 0x будет поставляться с более стандартными библиотеками, что упростит процесс разработки без многих других зависимостей. Пожалуйста, помогите мне догнать!C++ или C++ 0x - Какой лучший стандарт?

Спасибо!
Dennis M.

+7

Фактически, они оба находятся на одном уровне для чтения (сухой и безмозглый). Но, размышляя о том, как лучше всего убить кого-то на SO, чтобы задавать непростые вопросы, стандарт C++ 0x является явным победителем. Это намного толще и сокрушит черепа за половину времени, затраченного текущим стандартом :-) – paxdiablo

+0

Ни «C++», ни «C++ 0x» не являются стандартными. Последняя спецификация языка C++ - C++ 03. «C++ 0x» - это прозвище, используемое для последней спецификации языка * draft *. Херб Саттер указал, что он ожидает, что последний проект, скорее всего, будет одобрен как «C++ 11», что означает одобренный в 2011 году, или, наконец, если изменения потребуются в 2012 году, то есть проект станет «C++ 12», , –

+2

@paxdiablo, вы не можете сказать, что спецификация полностью * сухая и бесхитростная. Есть пасхальные яйца.Например, сноска на стр. 1107 FCD: «341) Атомные объекты не являются ни активными, ни радиоактивными». И да, я действительно нашел это самостоятельно, прочел через гробницу. –

ответ

10

Было бы очень грустно, если бы следующая версия C++ была количественно хуже текущей. Весь смысл новой редакции - улучшить ситуацию.

+0

Естественно, но я кое-что прочитал о том, что «Boost» похож на C++ 0x; я чувствую, что boostlib очень хорош для чего-то, но я не большой поклонник i я сам. Извините за такой, казалось бы, асинхронный вопрос, я пытаюсь просто понять лучшее понятие о том, где все движется. – RageD

+2

@ Dennis: Boost - неофициальная стандартная библиотека de facto для C++, предназначенная для предоставления библиотек, которые хорошо работают со стандартной библиотекой C++. Предполагается, что библиотеки в Boost, которые в целом полезны, в конечном итоге станут стандартными (как это уже происходит с такими вещами, как 'shared_ptr '). Прочитайте все об этом по адресу http://www.boost.org/ –

+0

@ Ken, true. Но @Dennis, конечно, как и любая часть стандартной библиотеки, это ваш выбор, когда и когда его использовать. Так, например, если вы не использовали 'boost :: shared_ptr', вам не нужно внезапно начинать использовать' std :: shared_ptr'. –

7

Ну, это зависит.

Настоящий стандарт C++ (C++ 03) является в настоящее время «лучше», поскольку большинство последних компиляторов C++ и стандартных библиотек хорошо соответствуют стандарту. Да, есть проблемы, но большинство из них очень хорошо известны (например, вряд ли какой-либо компилятор поддерживает экспорт) или довольно легко работать.

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

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

2

«C++ 0x, несомненно, станет новым стандартом» является преуменьшением. C++ 0x - это проект нового стандарта. Части этого доступны теперь в компиляторах, таких как G ++ 4.5.

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

+3

«Одна из существенных особенностей нового стандарта заключается в том, что он полностью совместим с обратной связью» - это очень сильное утверждение, которое является предположительно неправильным. Например, следующая действующая программа C++ 03: 'int static_assert = 0;' - не является допустимой программой C++ 0x. Это тривиальный случай, но есть множество других тонких различий. Тем не менее, это определенно очень важно. –

+1

Вы немного преувеличиваете. Это не полностью * обратно совместимо. Например. [необычное использование авто] (http://stackoverflow.com/questions/2847734/is-auto-int-i-valid-c0x) сломается. Более того, если языки слишком велики, они могут стать неуправляемыми и, следовательно, «хуже». Я не думаю, что C++ ударил по этому вопросу, но это, безусловно, общая возможность. –

+1

Я просто _love_ люди, которые используют «невозможное» слово. Люди, которые думают, что более поздние версии не могут быть хуже, не встретили моего друга, Гвидо, третью жену :-) – paxdiablo

1

Зависит от того, что вы подразумеваете под «лучше». Если вы имеете в виду «Скорее всего, работать с любым компилятором, который я использую в данный момент», тогда старый стандарт, безусловно, будет лучше, с небольшим количеством boost.