Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
C++0x<br />Елена Сагалаева, ADD-2010<br />
Сроки<br />Стандарт 1998-го года<br />Стандарт 2003-го года<br />С++0х выйдет не раньше 2011. Потому что процесс разработк...
Что хотели от C++0x<br />Сделать его лучше для системного программирования и разработки библиотек<br />Чтобы его было прощ...
От чего отказались<br />Сборка мусора<br />Концепции (хотя они уже были реализованы в GCC)<br />Урезали потоки (threads)<b...
Рассматриваемые компиляторы<br />GCC 4.5.1(Опция -std=c++0x). Реализовано больше всего.<br />Microsoft Visual C++ 2010<br ...
Двойные угловые скобки<br />Было:<br />vector<vector<int> > v;<br />Стало:<br />vector<vector<int>> v;<br />√GCC √MSVC++  ...
auto<br />Угадывание типа по инициализации<br />const int* bar() {…}<br />auto x = 7;<br />auto num = bar();<br />√GCC √MS...
auto<br />Было:<br />for(vector<int>::iterator p=v.begin(); p!=v.end(); ++p)<br />cout<<*p<<'
';<br />Стало:<br />for(auto...
Списки инициализации (initializer list)<br />Было:<br />vector <string> vMonths;<br />vMonths.push_back( "January" );<br /...
Списки инициализации<br />map<string,int> mFreq =<br />{  { "cat", 0 },<br />{ "catch", 0 },<br />{ "March", 0 }  };<br />...
Лямбды<br />Лямбда функции - неименованные функции<br />vector<int> v = { 3, 6, -7, 1};<br />std::sort(v.begin(), v.end(),...
lambda-capture<br />// ничего не берем<br />[](int x, int y) -> int { return x + y; }<br />//по значению<br />[=](int x, i...
Свойства лямбд<br />Если return один, то компилятор должен угадать тип возвращаемого значения (Стандарт, 5.1.2/4)<br />Каж...
Лямбды и замыкания<br />auto a = [](int Init) { <br />          return ( [=](int Val) { <br />			return Init + Val; <br />...
Обработка ошибок в лямбдах<br />std::sort(v.begin(), v.end(), [](int a, int b)) { <br />				return abs(a)<abs(b) 				     ...
nullptr<br />Замена для NULL<br />char* p = nullptr; <br />char* p2 = 0; // 0 работает и p==p2 <br />int i = nullptr; // о...
Атрибуты<br />class CBase {<br />public:<br />virtual void f [[final]] (); <br />};<br />class CDerived : public CBase { <...
long longint<br />Как минимум 64 бита<br />Совместимость с C99<br />Давно уже реализован в компиляторах<br />long long x =...
Вопросы?<br />alenacpp.blogspot.com<br />
Upcoming SlideShare
Loading in …5
×

C++0x

5,317 views

Published on

Несколько новых фичей из C++0x и их реализация в компиляторах GCC, MSVC++, Intel C++

Published in: Technology
  • Be the first to comment

C++0x

  1. 1. C++0x<br />Елена Сагалаева, ADD-2010<br />
  2. 2. Сроки<br />Стандарт 1998-го года<br />Стандарт 2003-го года<br />С++0х выйдет не раньше 2011. Потому что процесс разработки очень демократичный.<br />160 активно работающих человек, на каждом собрании ~60<br />Встречи проходят регулярно по всему миру<br />Final Committee Draft (FCD) был принят в марте этого года<br />
  3. 3. Что хотели от C++0x<br />Сделать его лучше для системного программирования и разработки библиотек<br />Чтобы его было проще учить<br />Обратная совместимость (не вводить новые ключевые слова)<br />
  4. 4. От чего отказались<br />Сборка мусора<br />Концепции (хотя они уже были реализованы в GCC)<br />Урезали потоки (threads)<br />Очень многое было убрано во время «Компромисса в Ко́не», октябрь 2007<br />
  5. 5. Рассматриваемые компиляторы<br />GCC 4.5.1(Опция -std=c++0x). Реализовано больше всего.<br />Microsoft Visual C++ 2010<br />Intel C++ Compiler 11.0 ( Опция /Qstd=c++0x)<br />
  6. 6. Двойные угловые скобки<br />Было:<br />vector<vector<int> > v;<br />Стало:<br />vector<vector<int>> v;<br />√GCC √MSVC++ √Intel<br />
  7. 7. auto<br />Угадывание типа по инициализации<br />const int* bar() {…}<br />auto x = 7;<br />auto num = bar();<br />√GCC √MSVC++ √Intel<br />
  8. 8. auto<br />Было:<br />for(vector<int>::iterator p=v.begin(); p!=v.end(); ++p)<br />cout<<*p<<' ';<br />Стало:<br />for(autop=v.begin(); v!=v.end(); ++p)<br />cout<<*p<<' ';<br />√GCC √MSVC++ √Intel<br />
  9. 9. Списки инициализации (initializer list)<br />Было:<br />vector <string> vMonths;<br />vMonths.push_back( "January" );<br />vMonths.push_back( "February" );<br />vMonths.push_back( "March" );<br />Стало:<br />vector <string> vMonths = {"January", "February", "March"};<br />√GCC ×MSVC++ ×Intel<br />
  10. 10. Списки инициализации<br />map<string,int> mFreq =<br />{ { "cat", 0 },<br />{ "catch", 0 },<br />{ "March", 0 } };<br />√GCC ×MSVC++ ×Intel<br />
  11. 11. Лямбды<br />Лямбда функции - неименованные функции<br />vector<int> v = { 3, 6, -7, 1};<br />std::sort(v.begin(), v.end(), [](int a, int b) { <br /> return abs(a)<abs(b); <br /> });<br />√GCC √MSVC++ √Intel<br />
  12. 12. lambda-capture<br />// ничего не берем<br />[](int x, int y) -> int { return x + y; }<br />//по значению<br />[=](int x, int y) -> int { return x + y + z; }<br />// по ссылке<br />[&](int x, int y) -> int { z++; return x + y + z; }<br />// по-разному<br />[&, z](int x, int y) -> int { return x + y + z; }<br />√GCC√MSVC++ √Intel<br />
  13. 13. Свойства лямбд<br />Если return один, то компилятор должен угадать тип возвращаемого значения (Стандарт, 5.1.2/4)<br />Каждая лямбда имеет свой тип<br />auto a1=[](int x){return x;}<br />auto a2=[](int x){return x;}<br />//a1!=a2<br />
  14. 14. Лямбды и замыкания<br />auto a = [](int Init) { <br /> return ( [=](int Val) { <br /> return Init + Val; <br />}); <br />};<br />auto a1 = a(5);<br />cout<<a1(3)<<endl; //8<br />cout<<a1(2)<<endl; //7<br />√GCC×MSVC++ √Intel<br />
  15. 15. Обработка ошибок в лямбдах<br />std::sort(v.begin(), v.end(), [](int a, int b)) { <br /> return abs(a)<abs(b) };<br />GCC – огромное сообщение об ошибке – десятки строк. Нужная информация в первых четырех.<br />Intel – сообщение повторяется несколько раз. Цикл?<br />
  16. 16. nullptr<br />Замена для NULL<br />char* p = nullptr; <br />char* p2 = 0; // 0 работает и p==p2 <br />int i = nullptr; // ошибка,nullptr - неint <br />Нет путаницы с таким случаем:<br />void foo(char *){}; <br />void foo(int){};<br />foo(nullptr); //вызывает foo(char *)<br />×GCC√MSVC++ ×Intel<br />
  17. 17. Атрибуты<br />class CBase {<br />public:<br />virtual void f [[final]] (); <br />};<br />class CDerived : public CBase { <br />public: <br /> virtual void f (); //ошибка!<br />}<br />Синтаксис атрибутов еще не утвержден, они нигде не реализованы.<br />
  18. 18. long longint<br />Как минимум 64 бита<br />Совместимость с C99<br />Давно уже реализован в компиляторах<br />long long x = 9223372036854775807LL; <br />
  19. 19. Вопросы?<br />alenacpp.blogspot.com<br />

×