1 / 19

C++0x

C++0x. Елена Сагалаева, ADD-2010. Сроки. Стандарт 1998-го года Стандарт 2003-го года С++0х выйдет не раньше 2011 . Потому что процесс разработки очень демократичный. 160 активно работающих человек, на каждом собрании ~60 Встречи проходят регулярно по всему миру

ellie
Download Presentation

C++0x

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++0x Елена Сагалаева, ADD-2010

  2. Сроки • Стандарт 1998-го года • Стандарт 2003-го года • С++0х выйдет не раньше 2011. Потому что процесс разработки очень демократичный. • 160 активно работающих человек, на каждом собрании ~60 • Встречи проходят регулярно по всему миру • Final Committee Draft (FCD) был принят в марте этого года

  3. Что хотели от C++0x • Сделать его лучше для системного программирования и разработки библиотек • Чтобы его было проще учить • Обратная совместимость (не вводить новые ключевые слова)

  4. От чего отказались • Сборка мусора • Концепции (хотя они уже были реализованы в GCC) • Урезали потоки (threads) Очень многое было убрано во время «Компромисса в Ко́не», октябрь 2007

  5. Рассматриваемые компиляторы • GCC 4.5.1(Опция -std=c++0x). Реализовано больше всего. • Microsoft Visual C++ 2010 • Intel C++ Compiler 11.0 ( Опция /Qstd=c++0x)

  6. Двойные угловые скобки Было: vector<vector<int> > v; Стало: vector<vector<int>> v; √GCC √MSVC++ √Intel

  7. auto Угадывание типа по инициализации const int* bar() {…} auto x = 7; auto num = bar(); √GCC √MSVC++ √Intel

  8. auto Было: for(vector<int>::iterator p=v.begin(); p!=v.end(); ++p) cout<<*p<<'\n'; Стало: for(autop=v.begin(); v!=v.end(); ++p) cout<<*p<<'\n'; √GCC √MSVC++ √Intel

  9. Списки инициализации (initializer list) Было: vector <string> vMonths; vMonths.push_back( "January" ); vMonths.push_back( "February" ); vMonths.push_back( "March" ); Стало: vector <string> vMonths = {"January", "February", "March"}; √GCC ×MSVC++ ×Intel

  10. Списки инициализации map<string,int> mFreq = { { "cat", 0 }, { "catch", 0 }, { "March", 0 } }; √GCC ×MSVC++ ×Intel

  11. Лямбды Лямбда функции - неименованные функции vector<int> v = { 3, 6, -7, 1}; std::sort(v.begin(), v.end(), [](int a, int b) { return abs(a)<abs(b); }); √GCC √MSVC++ √Intel

  12. lambda-capture // ничего не берем [](int x, int y) -> int { return x + y; } //по значению [=](int x, int y) -> int { return x + y + z; } // по ссылке [&](int x, int y) -> int { z++; return x + y + z; } // по-разному [&, z](int x, int y) -> int { return x + y + z; } √GCC√MSVC++ √Intel

  13. Свойства лямбд • Если return один, то компилятор должен угадать тип возвращаемого значения (Стандарт, 5.1.2/4) • Каждая лямбда имеет свой тип auto a1=[](int x){return x;} auto a2=[](int x){return x;} //a1!=a2

  14. Лямбды и замыкания auto a = [](int Init) { return ( [=](int Val) { return Init + Val; }); }; auto a1 = a(5); cout<<a1(3)<<endl; //8 cout<<a1(2)<<endl; //7 √GCC×MSVC++ √Intel

  15. Обработка ошибок в лямбдах std::sort(v.begin(), v.end(), [](int a, int b)) { return abs(a)<abs(b) }; • GCC – огромное сообщение об ошибке – десятки строк. Нужная информация в первых четырех. • Intel – сообщение повторяется несколько раз. Цикл?

  16. nullptr Замена для NULL char* p = nullptr; char* p2 = 0; // 0 работает и p==p2 int i = nullptr; // ошибка,nullptr - неint Нет путаницы с таким случаем: void foo(char *){}; void foo(int){}; foo(nullptr); //вызывает foo(char *) ×GCC√MSVC++ ×Intel

  17. Атрибуты class CBase { public: virtual void f [[final]] (); }; class CDerived : public CBase { public: virtual void f (); //ошибка! } Синтаксис атрибутов еще не утвержден, они нигде не реализованы.

  18. long longint • Как минимум 64 бита • Совместимость с C99 • Давно уже реализован в компиляторах long long x = 9223372036854775807LL;

  19. Вопросы? alenacpp.blogspot.com

More Related