LINUX.ORG.RU

Опубликован стандарт C++11 (бывший C++0x)

 , ,


0

4

ISO объявила о публикации стандарта C++11. Это первое значительное изменение стандарта с 1998-го года. Вот несколько новых объявленных возможностей:

  • ссылки на временные объекты и семантика переноса (rvalue reference);
  • обобщённые константные выражения (ключевое слово constexpr);
  • внешние шаблоны — возможность запретить компилятору инстанцировать шаблон в единице трансляции (extern template class);
  • ключевое слово auto для задания типа переменной на этапе компиляции;
  • цикл for по коллекции данных;
  • lambda-функции;
  • введена отдельная константа нулевого указателя nullptr;
  • шаблоны с переменным числом параметров (variadic templates);
  • thread-local хранилище, модель памяти с поддержкой потоков;
  • изменения в стандартной библиотеке: включение hash tables, регулярных выражений, smart pointers, элементов синхронизации потоков и т.п.

Полный список новых возможностей с подробным объяснением каждой из них можно посмотреть на http://en.wikipedia.org/wiki/C 11 или же более сжато на русском: http://ru.wikipedia.org/wiki/C 11

Полная поддержка C++11 обещается в GCC 4.7, объем поддержки на текущий момент можно оценить по таблице http://gcc.gnu.org/onlinedocs/libstdc /manual/status.html#status.iso.200x

ISO продает текст стандарта по 352 швейцарских франка ($386), но можно бесплатно скачать, например, его финальный черновик (практически не отличающийся от конечной версии) с сайта рабочей группы: http://www.open-std.org/jtc1/sc22/wg21/

>>> Пресс-релиз

★★

Проверено: maxcom ()
Последнее исправление: adriano32 (всего исправлений: 2)
Ответ на: комментарий от x4DA

а что, там уже есть runtime checks на разыменование null указателя? или это просто ключевое словцо ?

Там - это где?

mv ★★★★★
()

Опять переписывать целую кучу книг. GCC уже поддерживает этот стандарт? А мелкомягкие поделки?

terminator
()

А, чё обобряю вместо auto_ptr uniq_ptr, а то меня уже valgrind затрахал на char* по-поводу delete[] vs delete..

alx_me ★★☆
()
Ответ на: комментарий от yurkis

>Вот я почему-то давно хотел properties. Костылей наделали (в борланде, например). Но хотелось бы в стандарте...

Пора уже запомнить, что в C++ есть всё, кроме вещей, облегчающих работу программиста.

AX ★★★★★
()
  • ключевое слово auto для задания типа переменной на этапе компиляции;
  • цикл for по коллекции данных;
  • шаблоны с переменным числом параметров (variadic templates);

Здравствуй, D!

Vudod ★★★★★
()
Ответ на: комментарий от mv

> Получается, что 0 в качестве нуль-пойнтера - это special value, который должен поддерживаться рантаймом. Т.е. генерируемый код и рантайм языка должны знать, что если в пойнтере содержится 0, то это нифига не интегральный 0, а специальное значение, равное null.

зачем ему знать что-то кроме макроса NULL при компиляции?

aho
()
Ответ на: комментарий от Vudod

Вы бы c++0x нашли бы в педивикии и на дату посмотрели бы. Именно поэтому все плачут от облегчения, что вышло наконец-то!

alx_me ★★☆
()
Ответ на: комментарий от ugoday

>> GC в плюсах не нужен - есть подсчет ссылок и умные указатели

ваши умные указатели содержат в себе половину реализации GC


Сборщик мусора в C++ не нужен, необходимый минимум реализован в виде зоопарка *_pointer, new/delete итд

Относительно недавно все доказывали, что вывод типов вообще нафиг не нужен


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

Предсказываю: rогда его добавят в следующей версии стандарта, все будут доказывать его необходимость.


Я не буду => с предсказанием ты промахнулся

alienclaster ★★★
()
Ответ на: комментарий от AX

аа, понял. я такое в C# первый раз увидел.

x4DA ★★★★★
()

Он же 09 01 вышел, зачем вспоминать через полтора месяца?

frozenix ★★★
()
Ответ на: комментарий от anonymous

> А на нём что-то пишут ещё? Вроде все на джаву и дотнет перешли.

Есть кодинг и за пределами автоматизации ентерпрайза.

sv75 ★★★★★
()
Ответ на: комментарий от alienclaster

Я вообще не вижу разницы если программа не отпускает объект из-за ошибки в реализации алгоритма, или программа не вызвала delete. Поэтому что есть GC что его нет, проблем головы он не решает. Если очень плохо с разработчиками, то есть ТЕХНОЛОГИЯ .NET и ТЕХНОЛОГИЯ java прошу туда.

alx_me ★★☆
()
Ответ на: комментарий от mv

> Получается, что 0 в качестве нуль-пойнтера - это special value, который должен поддерживаться рантаймом

Скорее, компилятором.

УмнО, чо... Такой C++.

По-моему, в Си ровно то же самое.

tailgunner ★★★★★
()
Ответ на: комментарий от aho

зачем ему знать что-то кроме макроса NULL при компиляции?

Если используется специальная константа в исходнике - это одно дело. Если интегральное значение при некоторых условиях становится специальной - это совсем другое дело. Первое - нормальная практика, второе - половое извращение.

mv ★★★★★
()
Ответ на: комментарий от mv

> Медленный кодер - мёртвый кодер. Ну или, как вариант, голодный.

если он с самого начала за еду работает — тогда, конечно, да

www_linux_org_ru ★★★★★
()

/* ...нет ни одного компилятора С++, который полностью соответствовал бы стандарту - потому что стандарт составлен из такого количества разнородных кусков, скрепленных заплатами, что на программирование этого ушли бы годы. А стандарт еще и изменяется - ведь без этого невозможно было бы писать хвалебные статьи о «динамично развивающемся языке, вобравшем в себя новейшие технологии». Нет, отрасль программирования на С++ определенно создавали умные люди - это ведь не что иное, как действующий вечный двигатель! Судите сами: выпущен новый стандарт - получаем процент с продажи печатных экземпляров. Потом - платные консультации софтверным гигантам, выпускающим компиляторы С++. Вышли новые компиляторы - начинаем получать гонорары с книжек, в которых разъясняются новые возможности языка и как их можно попытаться использовать. Параллельно зарабатываем научные звания на комментариях к стандарту. На вырученные средства едим, пьем и радуемся жизни, главное - не забыть через пять лет снова собраться и принять очередной стандарт. Поэтому иногда я даже жалею, что когда я был маленьким, забыл придумать С++. А теперь уже поздно.

Несомненно, С++ ждет большое будущее. Сейчас все чаще говорят о языках программирования пятого поколения, и никто не подвергает сомнению то, что с современными языками у них будет очень мало общего. Казалось бы, причем тут С++ - ведь со свиным рылом в калашном ряду, как известно, делать нечего. Однако я уверен, что выход будет найден - в С++ введут еще набор конструкций для поддержки новой идеологии, в очередной раз озадачат производителей компиляторов, напишут горы новых книжек и С++, как всегда, останется самым-самым передовым и универсальным. В общем, все вернется на круги своя, и даже искусственные интеллекты далекого будущего будут сходить с ума исключительно по причине переполнения буфера */

(С) CyberManiac, «Почему они никогда не будут работать быстрее»

rics
()
Ответ на: комментарий от www_linux_org_ru

если он с самого начала за еду работает — тогда, конечно, да

Все мы за еду работаем. Кто-то за шаурму, кто-то за ведро икры, но сути-то это ведь не меняет, так?

mv ★★★★★
()
Ответ на: комментарий от rics

> нет ни одного компилятора С++, который полностью соответствовал бы стандарту

а насчет C99 он не говорил? там еще более старый стандарт

aho
()
Ответ на: комментарий от mv

>> По-моему, в Си ровно то же самое.

Не-не, NULL и 0 - это семантически две разные вещи.

Я говорю о том, что представление NULL в памяти может не быть «все нулевые биты», но NULL - это константа 0.

«An integer constant expression with the value 0, or such an expression cast to type void*, is called a null pointer constant

[...]

The macro NULL is defined in <stddef.h> as a null pointer constant».

tailgunner ★★★★★
()
Ответ на: комментарий от rics

Это вы ещё про питон и руби ничего не читали! Вот где стандартов!!

alx_me ★★☆
()
Ответ на: комментарий от mv

> Если используется специальная константа в исходнике - это одно дело. Если интегральное значение при некоторых условиях становится специальной - это совсем другое дело. Первое - нормальная практика, второе - половое извращение.

что-то тебя не туда понесло, в C++ есть константа в виде NULL, добавят еще одну, которая будет иметь тоже значение, но тип pointer, а не int, причем тут рантайм, «при некоторых условиях становится специальной» и пр.?

aho
()
Ответ на: комментарий от alienclaster

Сборщик мусора в C++ не нужен

У вас всегда так. Нет фичи в С++ --- значит не нужна. Есть фича --- значит она необходима и без неё никак нельзя обойтись. Подождём ещё десять лет, выйдет новый стандарт и GC ВНЕЗАПНО поменяет свой статус.

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

А про Хиндли-Милнера в вашем ПТУ не рассказывали?

Я не буду

Я верю.

ugoday ★★★★★
()
Ответ на: комментарий от rics

Да, вот ещё что. Никакой кучи компиляторов не существует, это чей-то горячечный бред. Есть один gcc и его наглый брат icc который мы опустим. Хотите переносимый код - пишите на C++14882-2011/gcc, товарищи! Остальные идут в жопу.

alx_me ★★☆
()
Ответ на: комментарий от alx_me

> Я вообще не вижу разницы если программа не отпускает объект из-за ошибки в реализации алгоритма, или программа не вызвала delete

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

Поэтому что есть GC что его нет, проблем головы он не решает.


GC значительно экономит время разработчика. Но мы то знаем, что тот, кого интересует скорость разработки, С++ выбирать не станет :)

alienclaster ★★★
()
Ответ на: комментарий от ugoday

Пока за 10 лет выйдет новый стадарт ваш брат битонщик уже фаломорфирует от числа высеров своего гуру. У нас всё ок. Раз в десять лет пройти повышение квалификации и гуляй!

alx_me ★★☆
()
Ответ на: комментарий от alx_me

>ну вы же планируете расширять типы, вводить свои? Вводить для них дествия, свойства.

Ну и как же в итоге это будет выглядеть?

AX ★★★★★
()
Ответ на: комментарий от ugoday

>> Возможно, потому что нормального вывода типов, который бы не создавал больше проблем, чем решал, еще никто не видел?

А про Хиндли-Милнера в вашем ПТУ не рассказывали?

Вот как раз Хиндли-Милнер на всей программе и создает проблемы.

tailgunner ★★★★★
()
Ответ на: комментарий от ugoday

>> Возможно, потому что нормального вывода типов, который бы не создавал больше проблем, чем решал, еще никто не видел?

А про Хиндли-Милнера в вашем ПТУ не рассказывали?


А в твоем ПТУ говорили, что она нормальная? Какой уровень аккредитации, -1й? :)

alienclaster ★★★
()
Ответ на: комментарий от alx_me

> Вы не читаете то на что отвечаете.

Я не только читаю, но еще и цитирую вас :)

Что одно, что другое утечка памяти. GC вам не поможет.


Что рак легких, что смерть от оргазма - все равно «все умрем». В GC память течет тоже, но не так же и не в таком количестве. Если фича (GC) дает нам хотя бы 0,000...1% выигрыша в производительности труда, при этом не ухудшая остальных весомых-для-данной-задачи характеристик применяемого инструмента, значит - она нужна. man эффективность по Парето

alienclaster ★★★
()
Ответ на: комментарий от vden

> Зависит от реализации. Скорее, предполагается, что NULL будет определяться не как (void*)0, а через nullptr.

Спасибо за разъяснение. Мои опасения относительно поддержки плюсового кода новым стандартом еще усилились. Всю жизнь на ноль проверяли же.

segfault ★★★★★
()
Ответ на: комментарий от alx_me

> На эстетов не угодишь.

properties позволяет писать компактно:

obj->name = "!11";

а

obj->name->Set( "!11" );

смотрится еще более громоздко чем геттеры/сеттеры

aho
()
Ответ на: комментарий от unsigned

> В C++ NULL deprecated. Его бы даже из C изжить надо.

Никаких warning-ов про его deprecate-ность от компилятора не получал. Что касается С - то в нем разве что «goto» лишнее, остальное трогать нельзя.

segfault ★★★★★
()
Ответ на: комментарий от segfault

> Мои опасения относительно поддержки плюсового кода новым стандартом еще усилились

ничего не ломается, просто там, где надо было явно кастить NULL к указателю, можно будет писать nullptr

aho
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.