C++17

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

С++17 (также известный как C++1z) — это неофициальное название будущей версии стандарта C++ ISO/IEC. Спецификации для C++17 находятся в стадии разработки и «почти завершены»[1], чтобы быть опубликованными в 2017 году.

Ожидаемые возможности[править | править вики-текст]

  • Стандартная библиотека языка Си была обновлена и адаптирована с версии C99 до C11[2];
  • Добавления текстового сообщения по-умолчанию для static_assert[3];
  • Удаление триграфов[4][5];
  • Использование typename в параметрах шаблона, находящегося внутри параметров другого шаблона[6];
  • Новые правила вывода типа для auto из списка инициализации (std::initializer_list)[7][8];
  • std::uncaught_exceptions, как замена std::uncaught_exception[9][10];
  • Определение вложенных пространств имён:[8][11] namespace A::B {};
  • Атрибуты для перечислений и пространств имён[10][12];
  • Символьные литералы UTF-8[10][13];
  • Оценка константности для всех нетипизированных аргументов шаблонов[10][14];
  • Упакованные выражения[10][15]template<typename... As> void foo(As... args) { return (args && ...); } ;
  • Новые методы вставки для std::map и std::unordered_map[16][17];
  • Унифицированный доступ к размеру контейнеров[17][18] std::size();
  • Определение «Смежный итератор»[17][19];
  • Удаление некоторых устаревших типов и функций, например, таких как std::auto_ptr, std::random_shuffle или старых функциональных адаптеров[20][8];
  • Библиотека файловой системы, основанная на boost::filesystem[21];
  • Параллельные версии алгоритмов STL[22];
  • Некоторые математические функции[23];
  • Большую часть экспериментальной библиотеки TS I[24].
  • Новый синтаксис для распаковки пар, кортежей и прочих типов, для которых реализован std::get. Например: auto x = std::make_tuple(4,6,7); auto [a,b,c] = x;
  • Инициализация переменной в if и switch. Например: if(auto a = getA(); a.isValid()) {}
  • Автоматический вывод аргументов шаблона класса; также поддерживается ручное указание правил вывода.

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]

  1. Recent milestones: C++17 nearly feature-complete, second round of TSes now under development
  2. C++17 should refer to C11 instead of C99.
  3. N3928: Extending static_assert, v2 (Walter E. Brown).
  4. N3981: Removing trigraphs??! (Richard Smith) (6 мая 2014).
  5. IBM comment on preparing for a Trigraph-adverse future in C++17, IBM paper N4210, 2014-10-10.
  6. N4051: Allow typename in a template template parameter (Richard Smith).
  7. N3922: New Rules for auto deduction from braced-init-list (James Dennett).
  8. 1 2 3 Updates to my trip report.
  9. N4259: Wording for std::uncaught_exceptions (Herb Sutter).
  10. 1 2 3 4 5 New core language papers adopted for C++17.
  11. N4230: Nested namespace definition (Robert Kawulak, Andrew Tomazos).
  12. N4266: Attributes for namespaces and enumerators (Richard Smith).
  13. N4267: Adding u8 character literals (Richard Smith).
  14. N4268: Allow constant evaluation for all non-type template arguments (Richard Smith).
  15. N4295: Folding expressions (Andrew Sutton, Richard Smith).
  16. N4279: Improved insertion interface for unique-key maps (Thomas Köppe).
  17. 1 2 3 New standard library papers adopted for C++17.
  18. N4280: Non-member size() and more (Riccardo Marcangelo).
  19. N4284: Contiguous Iterators (Jens Maurer).
  20. N4190: Removing auto_ptr, random_shuffle(), And Old <functional> Stuff (Stephan T. Lavavej).
  21. Filesystem Library Proposal (Beman Dawes).
  22. The Parallelism TS Should be Standardized.
  23. Mathematical Special Functions for C++17, v5.
  24. Adopt Library Fundamentals V1 TS Components for C++17 (R1).