SlideShare una empresa de Scribd logo
1 de 19
C++0x Елена Сагалаева, ADD-2010
Сроки Стандарт 1998-го года Стандарт 2003-го года С++0х выйдет не раньше 2011. Потому что процесс разработки очень демократичный. 160 активно работающих человек, на каждом собрании ~60 Встречи проходят регулярно по всему миру Final Committee Draft (FCD) был принят в марте этого года
Что хотели от C++0x Сделать его лучше для системного программирования и разработки библиотек Чтобы его было проще учить Обратная совместимость (не вводить новые ключевые слова)
От чего отказались Сборка мусора Концепции (хотя они уже были реализованы в GCC) Урезали потоки (threads) Очень многое было убрано во время «Компромисса в Ко́не», октябрь 2007
Рассматриваемые компиляторы GCC 4.5.1(Опция -std=c++0x). Реализовано больше всего. Microsoft Visual C++ 2010 Intel C++ Compiler 11.0 ( Опция /Qstd=c++0x)
Двойные угловые скобки Было: vector<vector<int> > v; Стало: vector<vector<int>> v; √GCC √MSVC++   √Intel
auto Угадывание типа по инициализации const int* bar() {…} auto x = 7; auto num = bar(); √GCC √MSVC++   √Intel
auto Было: for(vector<int>::iterator p=v.begin(); p!=v.end(); ++p) cout<<*p<<''; Стало: for(autop=v.begin(); v!=v.end(); ++p) cout<<*p<<''; √GCC √MSVC++   √Intel
Списки инициализации (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
Списки инициализации map<string,int> mFreq = {  { "cat", 0 }, { "catch", 0 }, { "March", 0 }  }; √GCC ×MSVC++   ×Intel
Лямбды Лямбда функции - неименованные функции 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
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
Свойства лямбд Если return один, то компилятор должен угадать тип возвращаемого значения (Стандарт, 5.1.2/4) Каждая лямбда имеет свой тип auto a1=[](int x){return x;} auto a2=[](int x){return x;} //a1!=a2
Лямбды и замыкания 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
Обработка ошибок в лямбдах std::sort(v.begin(), v.end(), [](int a, int b)) {  				return abs(a)<abs(b) 				      }; GCC – огромное сообщение об ошибке – десятки строк. Нужная информация в первых четырех. Intel – сообщение повторяется несколько раз. Цикл?
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
Атрибуты class CBase { public: virtual void f [[final]] ();  }; class CDerived : public CBase {  public:      virtual void f (); //ошибка! } Синтаксис атрибутов еще не утвержден, они нигде не реализованы.
long longint Как минимум 64 бита Совместимость с C99 Давно уже реализован в компиляторах long long x = 9223372036854775807LL;
Вопросы? alenacpp.blogspot.com

Más contenido relacionado

La actualidad más candente

Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Mikhail Kurnosov
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Ontico
 
операторы цикла в Visual basic
операторы цикла в Visual basicоператоры цикла в Visual basic
операторы цикла в Visual basic
anastastish
 

La actualidad más candente (20)

Конкурентные ассоциативные контейнеры
Конкурентные ассоциативные контейнерыКонкурентные ассоциативные контейнеры
Конкурентные ассоциативные контейнеры
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
 
3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы
 
2.2 Стек вызовов
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызовов
 
Максим Хижинский Lock-free maps
Максим Хижинский Lock-free mapsМаксим Хижинский Lock-free maps
Максим Хижинский Lock-free maps
 
Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
 
3.2 Методы
3.2 Методы3.2 Методы
3.2 Методы
 
Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмов
 
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...
 
Огранизация ввода и вывода данных
Огранизация ввода и вывода данныхОгранизация ввода и вывода данных
Огранизация ввода и вывода данных
 
операторы цикла в Visual basic
операторы цикла в Visual basicоператоры цикла в Visual basic
операторы цикла в Visual basic
 
Алгоритмическая конструкция Повторение
Алгоритмическая конструкция ПовторениеАлгоритмическая конструкция Повторение
Алгоритмическая конструкция Повторение
 
2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод2.8 Строки и ввод-вывод
2.8 Строки и ввод-вывод
 
6.2 Шаблоны функций
6.2 Шаблоны функций6.2 Шаблоны функций
6.2 Шаблоны функций
 
Защита информации семинар №8
Защита информации семинар №8Защита информации семинар №8
Защита информации семинар №8
 
Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур
 Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур  Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур
Кодогенерация на службе оптимизации, Игорь Чевдарь, СКБ Контур
 
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
 
A System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate ProgramsA System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate Programs
 

Similar a C++0x

2009 10-31 есть ли жизнь после mpi
2009 10-31 есть ли жизнь после mpi2009 10-31 есть ли жизнь после mpi
2009 10-31 есть ли жизнь после mpi
Michael Karpov
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
guestfc8ae0
 
20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin
Computer Science Club
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU
 

Similar a C++0x (20)

Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?
 
Cpp0x Introduction
Cpp0x IntroductionCpp0x Introduction
Cpp0x Introduction
 
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
 
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий Леванов
 
C++ трюки из Такси. Антон Полухин ➠ CoreHard Autumn 2019
C++ трюки из Такси. Антон Полухин ➠ CoreHard Autumn 2019C++ трюки из Такси. Антон Полухин ➠ CoreHard Autumn 2019
C++ трюки из Такси. Антон Полухин ➠ CoreHard Autumn 2019
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
 
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
2009 10-31 есть ли жизнь после mpi
2009 10-31 есть ли жизнь после mpi2009 10-31 есть ли жизнь после mpi
2009 10-31 есть ли жизнь после mpi
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 
Step cpp022
Step cpp022Step cpp022
Step cpp022
 
20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin20100927 28 reqformalization-kuliamin
20100927 28 reqformalization-kuliamin
 
idioms C++
idioms C++idioms C++
idioms C++
 
C++ idioms
C++ idiomsC++ idioms
C++ idioms
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++
 
Статический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий ЛевановСтатический и динамический полиморфизм в C++, Дмитрий Леванов
Статический и динамический полиморфизм в C++, Дмитрий Леванов
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
DSLs in Lisp and Clojure
DSLs in Lisp and ClojureDSLs in Lisp and Clojure
DSLs in Lisp and Clojure
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 

C++0x

  • 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<<''; Стало: for(autop=v.begin(); v!=v.end(); ++p) cout<<*p<<''; √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;