The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Спецификация C++0X принята в качестве международного стандарта C++11

14.08.2011 20:56

Завершилась длительная эпопея по принятию нового стандарта для языка программирования Си++. Комитет ISO по стандартизации языка C++ единогласно утвердил спецификацию C++0X в качестве международного стандарта "C++11". Стандарт C++0X планировалось выпустить еще в 2008 году, но его принятие постоянно откладывалось. Большинство представленных в стандарте возможностей уже поддерживаются в таких компиляторах, как GCC, IBM C++, Intel C++, Visual C++, C++ Builder. Поддерживающие C++11 стандартные библиотеки реализованы в рамках проекта Boost.

Новый стандарт развивался более 10 лет и пришел на смену стандартам C++98 и C++03. Отмечается, что если различия между стандартами C++98 и C++03 были столь незначительными, что их можно было не заметить, то стандарт C++11 содержит ряд кардинальных улучшений, как самого языка, так и стандартной библиотеки. По словам Бьерна Страуструпа, создателя C++, C++11 ощущается как новый язык, части которого лучше сочетаются друг с другом. В C++11 высокоуровневый стиль программирования стал более естественным, а эффективность возросла как никогда раньше. Кроме того, язык стал проще для изучения и освоения новичками.

Основные улучшения, отраженные в стандарте C++11:

  • Расширение стандартной библиотеки в таких областях, как регулярные выражения, хэши, генераторы случайных чисел, интеллектуальные указатели и т.п.
  • Поддержка лямбда-выражений и лямбда-функций, т.е. анонимных функций, объявляемых в месте использования. Например, "[](int x, int y) { return x + y; }";
  • Поддержка списков инициализации, т.е. передачи структуры или массива в виде списка значений. Например: для конструктора или функции Test можно указать шаблонный класс std::initializer_list и затем для инициализации использовать "Test testVar = {1, 2, 3, 4};" или "Test(1,2,3,4,5)";
  • Универсальная форма инициализации для всех видов объектов с помощью расширения синтаксиса списков инициализации;
  • Поддержка ключевого слова "decltype" для определения типа выражения во время компиляции, например, можно указать "decltype(someVar) otherIntegerVariable = 5;";
  • Возможность автоматического назначения типа при указании ключевого слова "auto". Тип выбирается на основании анализа типа аргумента. Например, "auto otherVariable = 5;";
  • Возможность создания шаблона функции, возвращаемый тип которого определяется автоматически на основании другой функции или выражения;
  • Аналог циклов "foreach" для перебора элементов коллекции. Например, для перебора элементов массива my_array достаточно указать "for(int &x : my_array)";
  • Реализация нового типа ссылок на временные объекты (Rvalue References), объявляемые через выражение "type &&";
  • Реализация ключевого слова "constexpr", позволяющего указать, что выражение (функция или конструктор) возвращает константу и данные выражения можно использовать как константы, например: "constexpr int GetFive() {return 5;}". В дальнейшем GetFive можно указать, например, при определении массива "int some_value[GetFive() + 7];";
  • Ослаблены требования при определении типов простых данных. Например, как тип простых данных могут рассматриваться классы, при соблюдении ряда правил;
  • Поддержка определения внешних шаблонов, позволяющих увеличить скорость компиляции;
  • Возможность создавать шаблоны с переменным количеством аргументов;
  • Расширенная поддержка символов в Unicode;
  • Возможность вызывать одни конструкторы класса из других конструкторов этого же класса, что позволяет создавать конструкторы, использующие другие конструкторы без дублирования кода;
  • Возможность использования локальных и безымянных типов в качестве аргументов шаблонов;
  • Вместо макроса NULL для обозначения нулевого указателя введено ключевое слово nullptr.


  1. Главная ссылка к новости (http://herbsutter.com/2011/08/...)
  2. OpenNews: Утвержден финальный черновой вариант стандарта C++0X
  3. OpenNews: Принятие стандарта языка C++0x вошло в финальную фазу
  4. OpenNews: В стандарте C++11 ожидаются значительные изменения языка C++
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/31476-cpp
Ключевые слова: cpp, gcc
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (115) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, Alatar (ok), 22:08, 14/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    >>Вместо макроса NULL для обозначения нулевого указателя введено ключевое слово nullptr;

    Забавно... А чем плох NULL?

     
     
  • 2.7, с11 (?), 22:16, 14/08/2011 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Забавно... А чем плох NULL?

    ключевое слово и макрос - разницу чувствуете?

     
  • 2.8, ДФ (ok), 22:22, 14/08/2011 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Для повышения читабельности кода, лучшего обнаружения ошибок и определения перегрузок процедур и функций. Более подробно http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1488.pdf
     
     
  • 3.34, F1l (?), 00:37, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +6 +/
    >14/88

    Я всегда знал что тут что-то не чисто.

     
  • 3.56, Alatar (ok), 10:06, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Для повышения читабельности кода, лучшего обнаружения ошибок и определения перегрузок
    > процедур и функций. Более подробно http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1488.pdf

    Ага, примерно понятно, спасибо.

     
  • 3.93, Alatar (ok), 14:07, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Для повышения читабельности кода, лучшего обнаружения ошибок и определения перегрузок
    > процедур и функций. Более подробно http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1488.pdf

    Кстати, вот ссылка на более свежую ревизию, пара интересных пояснений добавилось - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf

     
  • 2.30, Толстый (ok), 23:56, 14/08/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    NULL не имеет типа.
     
     
  • 3.38, Аноним (-), 01:23, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    А какой тип у nullptr?
     
     
  • 4.54, Mike Lee (?), 09:36, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    у него тип указатель. например есть перегруженная функция:

    int foo(int a);
    int foo(Type* a);

    сейчас при вызове foo(0) будет неоднозначность и нужно будет 0 явно кастить. в 0х можно будет написать foo(nullptr) и компилятор разберется.

     
     
  • 5.55, Alatar (ok), 10:00, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Дык, а чем foo(nullptr) лучше, чем foo(NULL) ? Там ведь, вроде, каст к указателю уже встроен в макрос. Или нет?
     
     
  • 6.70, dq0s4y71 (??), 11:51, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    #ifndef __cplusplus
    #define NULL ((void *)0)
    #else   /* C++ */
    #define NULL 0
    #endif  /* C++ */

    Я так думаю, nullptr - не просто указатель, а указатель на объект _любого типа_ - то, вместо чего сейчас используется костыль #define NULL 0.

     
     
  • 7.72, Alatar (ok), 12:09, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это откуда код Как я понял из приведённого выше документа, реализация сильно ра... большой текст свёрнут, показать
     
     
  • 8.89, dq0s4y71 (??), 13:28, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это код из GCC Полностью так A null pointer constant if defined _STD... большой текст свёрнут, показать
     
     
  • 9.90, dq0s4y71 (??), 13:35, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    На самом деле, да, нельзя - из-за перекрываемых функций ... текст свёрнут, показать
     
  • 9.91, Alatar (ok), 13:55, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ну в том смысле, что макрос разворачивается препроцессором и компилятор в процес... текст свёрнут, показать
     
  • 3.42, pavlinux (ok), 02:59, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > NULL не имеет типа.

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


      

     
     
  • 4.114, Аноним (-), 19:30, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > а остальное флуд, так как у напряжения не бывает типов.

    Ну просто некоторым хочется извратиться :). Господи, эти извращенцы даже для нуля с типом определиться не могут.

     
  • 2.107, Аноним (-), 16:35, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ошибка на миллиард.
     

  • 1.6, с11 (?), 22:14, 14/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    теперь еще до конца года ждать пока выпустят официальную документацию в виде книг
     
     
  • 2.139, Аноним (-), 16:03, 16/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > теперь еще до конца года ждать пока выпустят официальную документацию в виде
    > книг

    А потом еще пару лет, пока Мейерс и Саттер литературу выпустят :)

     

  • 1.9, Аноним (-), 22:30, 14/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Реализация ключевого слова "constexpr", позволяющего указать, что выражение (функция или конструктор) возвращает константу и данные выражения можно использовать как константы, например: "constexpr int GetFive() {return 5;}". В дальнейшем GetFive можно указать, например, при определении массива "int some_value[GetFive() + 7];";

    Не понимаю, зачем это. Не проще ли использовать константы как константы?

     
     
  • 2.25, anonymous (??), 22:59, 14/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Очевидно для сверхзаумных констант, которые на препроцессоре выглядят нехорошо, и тип отслеживается
     
  • 2.27, zog (??), 23:14, 14/08/2011 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Я так понимаю, что для того, чтобы можно было удобно рассчитать какие-то константы во время компиляции. Вот есть у тебя несколько констант. И некоторые от них зависят от других сложным образом (т.е. в одну строчку не запишешь), просто пишешь constexpr функцию, которая всё это аккуратно считает и используешь её потом.
     
  • 2.31, inv (ok), 00:13, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Так написано же, для чего(в качестве примера)...
    int val[getElementsCount()];
    Сейчас так делать нельзя (это вам не жаба)
     

  • 1.10, Vernat (ok), 22:33, 14/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ну то на русском тока, на английском я думаю гораздо раньше выйдут. Наверняка у  Мейерса, Саттер, Джосаттиса есть уже заготовки :).  А вот Александреску вроде совсем на D свалил
     
     
  • 2.12, с11 (?), 22:37, 14/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    до конца года хотя бы на инглыше
    на русском годика через два три
     
  • 2.100, арсен (?), 16:17, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ну в D есть много понятного и разумного. В С++ уже нет...
     

  • 1.16, iZEN (ok), 22:46, 14/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    С++ переусложнённый язык. Boost — это вообще монстр макроопределений и шаблонов.
     
     
  • 2.21, с11 (?), 22:54, 14/08/2011 [^] [^^] [^^^] [ответить]  
  • +10 +/
    > С++ переусложнённый язык.

    не осилил, так и скажи
    но всех тонкостей знать не обязательно

    > Boost — это вообще монстр макроопределений и шаблонов.

    библиотека != язык

    ps
    и да, java гадость ;)

     
  • 2.22, Lain_13 (?), 22:57, 14/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Как-будто так много изменилось… Лучше объясните мне какой прок от лямбда-функций. >_<
     
     
  • 3.26, anonymous (??), 23:03, 14/08/2011 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Как-будто так много изменилось… Лучше объясните мне какой прок от лямбда-функций.
    > >_<

    Вроде для быстрых собраных на на коленке компактных однострочников в стиле Pearl, [вброс]ну и вообще обфускация кода выйдет на новый уровень[/вброс]

     
     
  • 4.102, арсен (?), 16:21, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Как-будто так много изменилось… Лучше объясните мне какой прок от лямбда-функций.
    >> >_<
    > Вроде для быстрых собраных на на коленке компактных однострочников в стиле Pearl,
    > [вброс]ну и вообще обфускация кода выйдет на новый уровень[/вброс]

    В С++, на мой взгляд, не нужны.

     
     
  • 5.127, Аноним (-), 21:56, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Угу. И шаблоны тоже. Не говоря уже про классы. Зачем они вообще нужны? Структур вполне хватает.
     
  • 3.39, Аноним (-), 01:26, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Лучше объясните мне какой прок от лямбда-функций.

    Теоретики на них любят фапать. В остальном - можно и без них прекрасно обойтись. Хотя для написания неочевидного кода в стиле брейнфака - самое оно :)


     
     
  • 4.149, Michael Shigorin (ok), 22:52, 16/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >> Лучше объясните мне какой прок от лямбда-функций.
    > Теоретики на них любят фапать.

    Лоровские, что ли?

    > В остальном - можно и без них прекрасно обойтись.

    Без математики тоже можно программировать, несмотря на складывавшийся в совейское время стереотип.  Только вот он не зря складывался.

    Ммм... вот одни в школе алгебраическую задачку решают и пишут присваивание каждой строчкой, а другие в голове и пишут каждую вторую-третью строку продолжением (как чекпоинт для дебуга ;-).  Так вот в программировании без возможности сделать делалку не получается прыгать через ступеньку, так и останешься кодером.

     
     
  • 5.157, Аноним (157), 16:30, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Думаю не так много до окончательного разделения ( разраб/кодер ), т.к. для проверки своих мыслей и набросок исполняемого кода при разработке многих алгоритмов уже не нужно знание низкоуровневых языков, почему-то кажется что скоро появится профессия "интеллектуальный транслятор кода в ... из высокоуровневых систем разработки"
     
  • 3.40, Mike Lee (?), 01:28, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    ну очевидно ж, чтобы по нормальному использовать stl-ные алгоритмы.
     
  • 3.75, anonymous (??), 12:34, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Как-будто так много изменилось… Лучше объясните мне какой прок от лямбда-функций.
    > >_<

    Можно писать вполне читаемые фанкторы:

    find_if( a.begin(), a.end(), []( int i ) { return f1(f0(i)); } );

    На ISO/IEC-2003 придётся нарисовать класс с operator ()( int i ){ ... } внутри. По тексту (в старом написании) получится гораздо многословнее и будет гораздо менее очевидно --- что оно делает.

     
     
  • 4.79, Аноним (-), 12:49, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Можно писать вполне читаемые фанкторы:
    > find_if( a.begin(), a.end(), []( int i ) { return f1(f0(i)); } );

    Взаимоисключающие параграфы.

     
     
  • 5.88, anonymous (??), 13:26, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >> Можно писать вполне читаемые фанкторы:
    >> find_if( a.begin(), a.end(), []( int i ) { return f1(f0(i)); } );
    > Взаимоисключающие параграфы.

    Т.е. Вы, сударь, утверждаете, что

    struct foo
    {
      bool operator()( int i )
        { return f1(f0(i)); }
    };

    /* ... a lot of lines ... */

    find_if( a.begin(), a.end(), foo() );

    будет читаемей?

     
  • 4.80, dq0s4y71 (??), 12:50, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Читаемые? Ха-ха три раза. Зачем из С++ делать Питон? Может быть, лучше сразу писать на Питоне?
     
     
  • 5.105, fr0ster (ok), 16:28, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    К С++ прицепили парашут тормозной и вышел Питон?
     
  • 5.111, Аноним (-), 18:20, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Лямбды не делают из C++ питона. А на питоне лучше вообще ничего не писать.
     
     
  • 6.112, anonymous (??), 18:33, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    так называемые 171 лямбды 187 не делают из c ничего, кроме очередного монс... большой текст свёрнут, показать
     
  • 6.121, dq0s4y71 (??), 20:27, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, ладно, ладно, не делают... Неудачный я пример с Питоном привёл, согласен. Смысл был в том, что не надо приспосабливать микроскоп для забивания свай.
     
     
  • 7.122, Аноним (-), 20:46, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Что за бред-то? Не умеете/не хотите использовать лямбды - не используёте, для вас в языке ничего не изменилось. А нормальные люди используют, и плевать они хотели на вас.
     
  • 5.150, Michael Shigorin (ok), 22:54, 16/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Зачем из С++ делать Питон?

    При чём тут Питон и то, что Гвидо противится попыткам сделать из него этакий новый лисп?

     
  • 2.29, Vernat (ok), 23:37, 14/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    но реальной замены ему пока что вроде бы нет
     
     
  • 3.73, dq0s4y71 (??), 12:18, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Реальная замена С++ - это Си.
     
     
  • 4.123, Аноним (-), 20:47, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Реальная замена С++ - это Си.

    C не замена C++.

     
     
  • 5.128, Аноним (-), 21:58, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > C++ не замена C.

    fixed

     
  • 2.35, Аноним (-), 00:41, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Расслабься и учи. Других языков всё равно нет.
     
     
  • 3.58, Аноним (-), 10:13, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Есть, причем много. Хороших и разных.
     
  • 2.65, ezhik (?), 11:08, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Троли с LOR а делают вбросы на опеннете Было уже обсуждение Доболтались до тог... большой текст свёрнут, показать
     
     
  • 3.78, dq0s4y71 (??), 12:46, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Если бы это было так, то ничем, кроме С , никто не пользовался бы Именно так ... большой текст свёрнут, показать
     

  • 1.28, vbv (ok), 23:24, 14/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Добрый день!

    >Большинство представленных в стандарте возможностей уже поддерживаются в таких
    >компиляторах, как GCC

    ........
    >Возможность вызывать одни конструкторы класса из других конструкторов этого же
    >класса, что позволяет создавать конструкторы, использующие другие конструкторы
    >без дублирования кода;

    Хочу. Только вот у меня gcc на это дело ругается... Может ему чего-то включить нада?
    Знающие люди подскажите PLS.

    ps:
      Если "Inheriting Constructors" это оно - тогда вопрос исчерпан.

    pps: Разобрался.
      Фича называется "Delegating Constructors" Но без патча gcc ее не ест.

    Таким образом говорить про описание, видимо, рановато. Надо, чтобы еще и компиляторы всё это дело понимали.

     
     
  • 2.33, inv (ok), 00:21, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    g++ -std=c++0x
     

  • 1.32, pavlinux (ok), 00:20, 15/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Кроме того, язык стал проще для изучения и освоения новичками.

    Ага

    cout << x << (2 << *y) << endl;

    или для понимания:

    cout << x shl (2 shl *y) << endl;

     
     
  • 2.37, Аноним (-), 00:45, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Precedence << - слева направо, так что

    cout << x << (2 shl *y) << endl.

     
     
  • 3.44, pavlinux (ok), 05:00, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > cout << x << (2 shl *y) << endl.

    Вставил цитирование "язык стал проще для изучения и освоения новичками. "

    Мне надо:

    x << (2 << *y)

    1) 2 сдвинуть на то, что находиться по адреcу *y.
    2) x сдвинуть на то, что получилось в предыдущем выражении.
    3) вывести на консоль.  
    4) добавить конец строки.

    в С++ нет оператора shl.

     
     
  • 4.74, ананим (?), 12:32, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    можно подумать в других проще.
    вот так лучше что ли будет?
    >{
    >    char hex[] = { '0', '1, '2', '3', '4', '5', '6',
    >        '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f };
    >    byte b = (byte) 0xf1;                        
    >    System.out.println("b = 0x" + hex[(b >> 4) & 0x0f] + hex[b & 0x0f]);
    >  }

    http://khpi-iip.mipk.kharkiv.edu/library/oop/kart/05.html
    офигенно понятно для новичка. что доказывает:
    - что чтение доки лишним никогда не бывает;
    - предметную область знать нужно;
    - и не стоит писать плохо понятный код (где из твоего кода понятно что y не класс к примеру с переопределенным оператором?) в одну строчку, даже если С++ это позволяет (для кого инлаййн придумали? да даже макросы?)

     
  • 4.108, inv (ok), 16:42, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +4 +/
    А если в алгебраическом выражении скобки забудешь, математика тоже станет "сложной и неудобной"?
     
  • 4.126, Аноним (-), 20:51, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > 1) 2 сдвинуть на то, что находиться по адреcу *y.
    > 2) x сдвинуть на то, что получилось в предыдущем выражении.
    > 3) вывести на консоль.
    > 4) добавить конец строки.

    Вы вообще не знаете языка, я правильно понял?

    std::cout << (x << (2 << *y)) << std::endl;

    > в С++ нет оператора shl

    Вы сами первый его написали. Отвечающие любезно продолжили его использовать чтобы вам было понятнее.

     
     
  • 5.129, pavlinux (ok), 23:16, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Вот позовите к экрану блондинку изучавшую в универе только Паскаль, и попросите ... большой текст свёрнут, показать
     
     
  • 6.140, Аноним (-), 16:13, 16/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Я порадуюсь, если у нее мозг раком встанет. Ибо блондинок не надо.
    Пущай лучше она пишет ..в твиттер, например. :)

     
     
  • 7.158, Аноним (157), 16:43, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Я порадуюсь, если у нее мозг раком встанет. Ибо блондинок не надо.
    > Пущай лучше она пишет ..в твиттер, например. :)

    К Сожалению C++ появился тогда когда люди решали не только проблему какой сделать синтаксис, но и проблему "сколько символов для реализации задачи понадобится" поэтому так и вышло, 90% кода который попадается не на c++ читается нормально, c++ постоянно ловишь себя на мысли что приходиться задумываться "что же в этом месте происходит".

     
     
  • 8.160, arisu (ok), 05:05, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    ты спутал его с C ... текст свёрнут, показать
     
     
  • 9.161, Аноним (157), 10:12, 20/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    ну т к с возник как дополнение к c это не сильно принципиально, но в начале 8... текст свёрнут, показать
     
  • 2.151, klalafuda (?), 01:00, 17/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > cout << x << (2 << *y) << endl;
    > или для понимания:
    > cout << x shl (2 shl *y) << endl;

    А я своему коллеге по этому поводу скажу просто и ясно - иннах поспи и не выеживайся. Как проспишься - проходи, обсудим. Это если в реале. Ну а в теории - да, по настроению, буду сопли наматывать на локти лишь бы пофлеймить на пустом месте.

     

  • 1.36, Аноним (-), 00:42, 15/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Два года уже весь продакшн код только на 0x. Без rvalue references/move semantics C++ вообще не нyжен.
     
     
  • 2.41, Вова (?), 01:38, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    в какой конторе?
     
     
  • 3.43, anonymous (??), 03:39, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +6 +/
    > в какой конторе?

    Anonymous, Gmbh -- очевидно же.

     
     
  • 4.83, Аноним (-), 12:52, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Anonymous, Gmbh -- очевидно же.

    Broken & Late, ltd ;)

     

  • 1.45, Аноним (-), 05:30, 15/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Все ясно... Как в свое время ползли мобильники и смартфоны друг к другу. Так сейчас ползет C++ к Java. Ну осталось совсем немного подождать... Пока доползут...
     
     
  • 2.47, ezhik (?), 07:19, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Судя по тому, что в сомнительных комментариях к статье ничего кроме Java не упоминают, я делаю вывод, что народ ничего другого и не знает.

    Сейчас что в школах/колледжах только Java преподают?

     
     
  • 3.159, Аноним (157), 16:46, 19/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Судя по тому, что в сомнительных комментариях к статье ничего кроме Java
    > не упоминают, я делаю вывод, что народ ничего другого и не
    > знает.
    > Сейчас что в школах/колледжах только Java преподают?

    просто при разработке синтаксиса Java уже знали о проблемах предшественников, хотя и своих немного добавили

     
  • 2.49, www2 (??), 07:38, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    C++ станет таким же быстрым, как Java, а Java станет такой же надёжной и простой, как C++.
     
  • 2.87, anonymous (??), 13:17, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Все ясно... Как в свое время ползли мобильники и смартфоны друг к
    > другу. Так сейчас ползет C++ к Java.

    Скорее нет. Я вот в итоговом документе 'java-измов' не наблюдаю.

    > Ну осталось совсем немного подождать... Пока доползут...

    Из того, что сейчас оформилось, в процессе подготовки выкинули сильно лоббированный одной фирмой garbage collector.

     
     
  • 3.141, Аноним (-), 16:19, 16/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Из того, что сейчас оформилось, в процессе подготовки выкинули сильно лоббированный одной
    > фирмой garbage collector.

    И абсолютно правильно сделали. RAII и смарт-поинтеры и без gc справляются.

     

  • 1.51, ProfX (ok), 08:52, 15/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Всем привет!
    Я очень рад, что наконец стандарт С++11 утвержден, будем теперь только ждать доки и с удовольствием изучать. Мы застали новую ступень эволюции С++!
    То что С++ становится похож на Java - не факт. Java не настолько гибка как С++, в то время как с появлением стандарта С++11 - C++ становится еще гибче чем был. Меня например очень радует появоение возможности создавать шаблоны с переменным числом аргументов.
     
     
  • 2.52, anonymous (??), 09:05, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    не гибче, а монструозней.
     
     
  • 3.53, ProfX (ok), 09:19, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Нет, тут есть одна деталь.

    С одной стороны:
    новичку, изучить базовые конструкции С++ и начать ими пользоваться, думаю сейчас станет легче. Но это не сделает его професионалом, т.к. все эти нововведения (новая конструкция for, и пр.) - верхушка айсберга.

    с другой стороны:
    для того чтобы стать професионалом - теперь надо знать куда больше чем раньше - так как язык значительно расширился.

     

  • 1.57, Адольф (?), 10:07, 15/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Здесь можно посмотреть поддержку компиляторами нового стандарта
    http://wiki.apache.org/stdcxx/C++0xCompilerSupport
     
  • 1.59, vaychick (?), 10:45, 15/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как насчет поддержки MinGW?
     
     
  • 2.60, anonymous (??), 10:52, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > А как насчет поддержки MinGW?

    а кого волнует винда? у вас есть свой компилятор, от m$ — вот к ним и пишите, пусть поддержку пилят.

    правда, учитывая, что C99 они не смогли осилить за более чем десять лет… ну, я бы не надеялся.

     
     
  • 3.67, vivac (?), 11:28, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    учитывая что большенство плюшек С99 используется в linux ядре
    то вопрос о том кто его проталкивает более чем очевиден
     
     
  • 4.77, ананим (?), 12:40, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    и что?
    не, нужно оставновить развитие всяких сейпласплас и срочно пересесть на дотнет/моно?

    зыж
    а какое отношение С99 имеет к С++0X (да и просто С++) вообще, и к ядру линуха в частности?
    опять ограничение знаний подвело "удачный" тролизм счастливого обладателя винды?

     
     
  • 5.85, vivacpp (?), 12:54, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    анонимы как всегда весь треид не читают
    ишут подходящее выражение что бы вставить именно свое словцо?
     
     
  • 6.120, ананим (?), 19:53, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ха! вопрос про мингв (который таки и с++ и таки соотносится с сабжем) только таких умников как ты может привести к гцц специфик в ведре, который исключительно на С.
    Пиши ищё. :D
     
     
  • 7.131, vivacpp (?), 00:35, 16/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ты таки в пролете, потому что я отвечал на плюшки c99
    и то, почему M$ особо не спешит их осваивать
    в M$ на плаин C только ядро, и то не все, остальная часть драйверов итд на c++
    поэтому закидоны насчет c99, идите пишите в комитет
    этот стандарт развивают отдельно и с++ он никак не касается
     
  • 4.84, Аноним (-), 12:54, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > учитывая что большенство плюшек С99 используется в linux ядре

    Да хоть в чьем ядре. Он тупо удобнее предшественников. А если до MS как до жирафа - пусть это будет их проблемой, а не моей.


     

  • 1.62, vaychick (?), 10:59, 15/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >у вас есть свой компилятор, от m$

    M$ как раз по ссылке http://wiki.apache.org/stdcxx/C++0xCompilerSupport половину поддерживает, я понял что задал глупый вопрос потому, что MinGW порт GCC и пока очередную версию GCC портируют пройдет время, причем не известно сколько.

     
     
  • 2.66, anonymous (??), 11:19, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > причем не известно сколько.

    но долго, долго. потому что всем лень.

     

  • 1.68, Аноним (-), 11:31, 15/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Мой комент потерли. Ладно, задам вопрос по другому. :(
    Сейчас параллельно с C++0X разрабатывается очередной стандарт программирования Си под кодовым названием C1X. Мне вот интересно, они их как нибудь будут синхронизировать, дабы исключить возможность появления несовместимости, или таки решили развиваться обособленно?
     
     
  • 2.71, Аноним (-), 12:03, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Несовместимости и раньше были. И развиваются они параллельно.
     

  • 1.92, gkv311 (ok), 13:56, 15/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто-нибудь понял зачем они wchar_t сделали независимым от char16_t и char32_t типом? Для того чтобы старые платформо-зависимые Unicode-ные велосипеды остались нетронутыми, но при этом и несовместимыми с новыми типами?
     
     
  • 2.95, barmaglot (??), 15:02, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/

    Да возрадуйтесь-же !!!

    u8"I'm a UTF-8 string."
    u"This is a UTF-16 string."
    U"This is a UTF-32 string."

     
     
  • 3.96, Аноним (-), 15:20, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    L"This is a wide string."
     
     
  • 4.97, barmaglot (??), 15:29, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    ... L"", produces a null-terminated array of type const wchar_t, where wchar_t is a wide-character. Neither literal type offers support for string literals with UTF-8, UTF-16, or any other kind of Unicode encodings.

    Поддержка L""  никуда не делась и не денется, но L"" это сферический конь в вакууме. Из за этого постоянно приходилось внешние костыли/преобразователи в unicode использовать.

     
     
  • 5.104, gkv311 (ok), 16:28, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Поддержка L""  никуда не делась и не денется, но L"" это
    > сферический конь в вакууме. Из за этого постоянно приходилось внешние костыли/преобразователи
    > в unicode использовать.

    Если говорить о Linux, то там всё станет прозрачно - юзай Utf-8 везде и всё зашибись.
    А в виндах WinAPI по прежнему на wchar_t, и чего с ним делать - непонятно.
    То есть по-прежнему придётся писать для него костыли, ибо с char16_t оно 'не дружит', хотя по сути - оно и есть на виндах.

     

  • 1.99, barmaglot (??), 16:14, 15/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Наконец-то Особенно радует 1 Стандартизация регекспов 2 Возможность создани... большой текст свёрнут, показать
     
     
  • 2.109, anonymous (??), 17:15, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    atomics и mutexes --- это, мммм, совсем разные вещи В связи с атомиками в станд... большой текст свёрнут, показать
     
     
  • 3.110, barmaglot (??), 18:15, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо К О А то я незнал что атомики и mutex разные вещи Однако все атомарны... большой текст свёрнут, показать
     
     
  • 4.113, phprus (ok), 19:24, 15/08/2011 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > >> atomics и mutexes --- это, мммм, совсем разные вещи.
    > Спасибо К.О. А то я незнал что атомики и mutex разные вещи. Однако все "атомарные" операции реализуются mutex-ами за неимением атомарных типов/операций в языке.

    Какие мутексты, какие атомарные типы/операции?!

    Если мне память не изменяет, то уже лет 15+ известные мне архитектуры имеют соответствующие ассемблерные инструкции для атомарной работы с "переменными" в памяти.
    На х86 атомарными инструкциями можно работать с 8,16,32 битовыми ячейками, на х86-64 еще и с 64битовыми.
    А через мутексы атомарные операции реализуются только для типов, которые не подпадают под вышеназванные размеры для целевой платформы.

     
     
  • 5.132, inv (ok), 01:55, 16/08/2011 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Яволь TSL инструкция зовётся :) (test and set lock)
    На этой инструкции базируются все синхронизационные механизмы, такие как мутексы и семафоры. Без неё это просто не работало бы, ибо нужно всегда быть уверенным что флажок отвечающий за занятость критической секции будет переписано только одним потоком.
     
     
  • 6.142, anonymous (??), 16:48, 16/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Без неё это просто не работало бы, ибо нужно всегда быть
    > уверенным что флажок отвечающий за занятость критической секции будет переписано только
    > одним потоком.

    а мужики-то не знают
    гуглите алгоритм дейкстры

     
     
  • 7.146, inv (ok), 18:51, 16/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Слышал звон, не знаю где он D Алгоритм дейкстры совершенно никак сюда не отн... большой текст свёрнут, показать
     
     
  • 8.153, Вова (?), 10:05, 17/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Мне ваши сообщения напоминают пересказ содержимого обрывков старой газеты с гвоз... большой текст свёрнут, показать
     
     
  • 9.156, inv (ok), 01:14, 18/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Читал я про этот алгоритм, газетка того же года из той же деревни, название запа... текст свёрнут, показать
     
  • 4.144, anonymous (??), 16:50, 16/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Спасибо К.О. А то я незнал что атомики и mutex разные вещи.
    > Я к сожалению прямо
    > сейчас в код gcc зелезть не могу, поэтому незнаю использованы ли
    > старые грин-тред наработки для реализации атомиков, то-есть юзерлэнд или используются
    > средства ОС. для меня актуальны *nix, соответственно , -  POSIX.1c

    не надо лезть в код gcc своими грязными руками.
    они специально для вас выложили наружу инстриники.
    которые, естественно, никакого отношения к libpthread не имеют.

     
  • 2.137, aborodin (??), 12:53, 16/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > 5. Возможность вызывать одни конструкторы класса из других конструкторов этого же класса,
    > что позволяет создавать конструкторы, использующие другие конструкторы без дублирования
    > кода; (Наконец-то!!!)

    Что наконец-то? Ещё одна ложка синтаксического сахара? Ничего не слипнется?

    Дублирование кода можно избежать, если вынести его в отдельную функцию.

     
     
  • 3.145, Аноним (-), 18:40, 16/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Дублирование кода можно избежать, если вынести его в отдельную функцию.

    Да, но.. Инициализация в отдельной функции не отменяет инициализацию в конструкторе. Двукратная инициализация может дорогого стоить.

     
     
  • 4.152, aborodin (ok), 09:42, 17/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >> Дублирование кода можно избежать, если вынести его в отдельную функцию.
    > Да, но.. Инициализация в отдельной функции не отменяет инициализацию в конструкторе. Двукратная
    > инициализация может дорогого стоить.

    Ничего не понял. Какая двухкратная инициализация?

    Пример:

    // функция инициализации для избавления от дублирования кода
    void foo:init (список параметров)
    {
    код_инициализации;
    }

    // первый конструктор
    foo::foo (список_параметров)
    {
    init (аргументы);
    }

    // второй конструктор
    foo::foo (список_параметров)
    {
    код;
    init (аргументы);
    код;
    }

    По новому стандарту, это будет выглядеть так:

    // первый конструктор
    foo::foo (список_параметров)
    {
    код_инициализации;
    }

    // второй конструктор
    foo::foo (список_параметров)
    {
    код;
    foo (аргументы); // первый конструктор
    код;
    }

    Я правильно понимаю идею?

     

  • 1.154, Аноним (-), 10:41, 17/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    class Bar
    {
       члены класса
       void initialize( аргументы );

    public:
       Bar( аргументы ); // конструктор
    };

    Bar::Bar( аргументы ) // инициализация членов класса значениями по-умолчанию, все равно что
      : member1()
      , member2()
      // etc
    {
      initialize( аргументы ); // инициализация
    }

    void Bar::initialize( аргументы )
    {
      // что-то инициализируется
    }


    Здесь члены класса инициализируются два раза: один раз в конструкторе значениями по-умолчанию, второй раз - в методе initialize.

    Теперь понятно?

     
     
  • 2.155, aborodin (ok), 11:32, 17/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Да, понятно. Спасибо.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру