SlideShare a Scribd company logo
Жив ли Си++?
Прошлое, настоящее, будущее.

Карпов Андрей Николаевич
к.ф.-м.н., MVP (Visual C++),
технический директор
ООО «СиПроВер»
Сайт: www.viva64.com
E-Mail: karpov@viva64.com
Умер ли Си/Си++?
Нет. Он одна из важных
      технологий.

Просто технологий стало
        больше!
• Кода на Си/Си++ в старых и новых системах
  не стало меньше.
• Выросло количество разрабатываемых
  систем, где рационально использовать
  другие языки (web, мобильные телефоны,
  клиентские программы).
• Аналогия с бумагой. Кажется,
  компьютерные технологии повсеместно
  могут заменить бумагу.
Говорить «стало меньше Си++» как
      говорить «меньше стала
      использоваться бумага»
• Государственные учреждения. Куда ставить
  печать и подпись?
• Надежность (архивы, военное дело).
• Бумажные книги не исчезли.
• Комиксы, раскраски для детей, оригами.
• Как поможет iPhone в туалете?
Закрывать бумажную фабрику
         смысла нет.

А стоит ли продолжать заниматься
             Си/Си++?

    Да. Это приносит деньги.

Поговорим, почему это приносит
           деньги.
Почему язык Си/Си++ ещё очень
        долго будет популярен
• Инерция;
• Ресурсоемкие вычисления;
• Экономия энергии;
• Ограничения встраиваемых и мобильных
  систем;
• Новые языки приходят и уходят, а Си/Си++
  остаётся.
Инерция
• Существуют такие продукты, как «CHARON-
  PDP11 for Windows» для поддержки PDP11.
  Компания Stromasys - www.stromasys.ch

• Неудача Intel c 64-битной архитектурой
  Itanium.

• Огромное количество
  БОЛЬШИХ библиотек.
  Пример: библиотека ACIS.
Ресурсоемкие вычисления
• Активно используется Фортран. Си/Си++
  рассматриваются для таких задач в
  перспективе. Intel активно работает над
  включением матриц в стандарт языка Си++.
• Си/Си++ позволяют максимально полно
  использовать доступную память.
• Си самый быстрый (после Фортрана). Не
  верьте рекламным измерениям скорости.
Экономия энергии
• Макро. Для датацентра с
  тысячами обращений в
  секунду важно, работает
  алгоритм 100 или 150
  микросекунд.

• Микро. Важно для
  встраиваемых
  систем, работающих долгое
  время.
Ограничения встраиваемых и
         мобильных систем
• Нужно работать быстро, чтобы уменьшить
  потребление энергии.
• Ограничения объема памяти.
• Новое направление – робототехника на
  дому.
• Лучше потратить деньги на оптимизацию
  ПО, чем увеличить стоимость аппаратной
  части миллионов устройств.
Новые языки приходят и уходят, а
           Си/Си++ остаётся
    C++ Applications: http://www.stroustrup.com/applications.html

•   Adobe Systems: Photoshop, Acrobat, Illustrator, ...
•   Apple: OS X (разные языки, но в основном Си++)
•   Autodesk: различные CAD системы
•   CERN: Data analysis
•   Facebook: Several high-performance and high-
    reliability components.
•   Google: Chromium, MapReduce, Google file system.
•   Microsoft: Windows, Microsoft Office, ...
•   Mozilla: Firefox, Thunderbird
•   ...
Си/Си++ не только жив, но и
  постоянно развивается
О новом в языке
(будем говорить только про Си++)
Делегирующие конструкторы
class File
{
public:
  File(char const * filename, char const * mode)
      : file_(fopen(filename, mode))
  {
  }

 ~File()
 {
   fclose(file_);
 }

Теперь нам хочется сделать что-то сложное в
конструкторе, что может бросить исключение.
Делегирующие конструкторы
class File
{
  File(FILE * file) : file_(file)
  {}

public:
  File(char const * filename, char const * mode)
      : File(fopen(filename, mode))
  {
    Foo();
  }

Другое применение –
можно избавиться от функции Init().
Диапазонный for, auto, списки
           инициализации
auto x = A * B;


std::vector<string> string_array = { "aa", "bb" };

for (auto s : string_array)
{
  cout << s << endl;
}


for (const auto x : { 1,2,3,5,8,13,21,34 })
  cout << x << 'n';
Управление поведением по
        умолчанию: default и delete
Сейчас стандартная идиома «запрета копирования» может быть
явно выражена следующим образом:

class X {
  …
  X& operator=(const X&) = delete;
  X(const X&) = delete;


И наоборот, мы можем явно сказать о том, что хотим
использовать поведение копирования по умолчанию:

class Y {
  …
  Y& operator=(const Y&) = default;
  Y(const Y&) = default;
enum class – строго типизированные
            перечисления
Объявления “enum class Color { red, blue };”
решают проблемы:
• Стандартные перечисления (enums) могут
  неявно преобразовываться к int.
• Стандартные перечисления экспортируют свои
  значения в окружающую область видимости,
  что приводит к коллизиям имен.
• Невозможно указать тип, лежащий в основе
  стандартных перечислений.
сonstexpr – обобщенные гарантировано
       константные выражения

  constexpr int Foo(int a, int b)
  {
    constexpr int tmp = a + 10;
    return tmp | b;
  }


  int x = Foo(1, 2);
decltype – тип выражения

void f(const vector<int>& a, vector<float>& b)
{
      typedef decltype(a[0]*b[0]) Tmp;
      for (int i=0; i<b.size(); ++i) {
             Tmp* p = new Tmp(a[i]*b[i]);
             // ...
      }
      // ...
}
Инициализация членов класса при
          объявлении
class A {
public:
      int a = 7;
};


Эквивалентно:

class A {
public:
      int a;
      A() : a(7) {}
};
Статические утверждения
static_assert(
  sizeof(long)>=8,
  "64-bit code generation required for this library."
);
nullptr - литерал для задания
     нулевого указателя
            void f(int);
            void f(char*);

            f(0);      // вызов f(int)

            f(nullptr); // вызов f(char*)
Шаблоны с переменным числом
           параметров
template<typename T, typename... Args>
void printf(const char* s, T value, Args... args)
{
  while (s && *s) {
    if (*s=='%' && *++s!='%') {
      std::cout << value;
      return printf(++s, args...);
    }
    std::cout << *s++;
  }
}
Лямбда-выражения
std::sort(v.begin(), v.end(),
          [](int a, int b) { return abs(a)<abs(b); });

vector<int> myList;
int total = 0;
for_each(myList.begin(), myList.end(), [&total](int x)
{
  total += x;
});
std::cout << total;

auto myFunc = [this]() { this->PrivateMemberFunc (); };
Другое
•   Rvalue ссылки &&
•   Пользовательские литералы
•   Атрибуты **…++
•   Класс array: array<int,6> a = { 1, 2, 3 };
•   …
Дополнительные ссылки
• C++ 11 FAQ от Бьярна Страуструпа (перевод)
  http://sergeyteplyakov.blogspot.com/2012/05
  /c-11-faq.html

• «Универсальные» ссылки в C++11 или T&&
  не всегда означает «Rvalue Reference»
  http://habrahabr.ru/post/157961/

More Related Content

PPTX
вывод алфавитно цифровой информации
Lungu
 
PDF
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU
 
PDF
2.8 Строки и ввод-вывод
DEVTYPE
 
ODP
Dynamic memory
Alexey Bovanenko
 
PPT
Программирование линейных алгоритмов
Andrey Dolinin
 
PDF
Rust: абстракции и безопасность, совершенно бесплатно
Open-IT
 
вывод алфавитно цифровой информации
Lungu
 
Tech Talks @NSU: Теоретические основы программирования: проекции Футамуры-Тур...
Tech Talks @NSU
 
2.8 Строки и ввод-вывод
DEVTYPE
 
Dynamic memory
Alexey Bovanenko
 
Программирование линейных алгоритмов
Andrey Dolinin
 
Rust: абстракции и безопасность, совершенно бесплатно
Open-IT
 

What's hot (20)

PPTX
Functional Programing
Max Arshinov
 
PPT
Представление информации в компьютере
Andrey Dolinin
 
PDF
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Mikhail Kurnosov
 
PDF
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Mikhail Kurnosov
 
PDF
S2 boolean amp-amp_complex_gates
ssuser3ad198
 
PDF
6.2 Шаблоны функций
DEVTYPE
 
PDF
ОПК № 2 – Алгоритмы и структуры данных, язык C
Vladimir Parfinenko
 
PPT
Программирование. Лекция 3
Andrei V, Zhuravlev
 
PDF
Haskell Type System with Dzmitry Ivashnev.
Sergey Tihon
 
PDF
4.3 Виртуальные методы
DEVTYPE
 
PDF
S3 karnaugh maps-full
ssuser3ad198
 
PDF
4.4 Таблица виртуальных методов
DEVTYPE
 
PPT
презентация лекции №10
student_kai
 
PDF
Обработка текста на Haskell - это просто!
Mike Potanin
 
PDF
Представление графов в памяти компьютера (c++).
Olga Maksimenkova
 
PDF
S3 karnaugh maps-short
ssuser3ad198
 
PPT
алфавит
anastastish
 
PPT
Системы счисления
Andrey Dolinin
 
PDF
Урок 17. Паттерн 9. Смешанная арифметика
Tatyanazaxarova
 
Functional Programing
Max Arshinov
 
Представление информации в компьютере
Andrey Dolinin
 
Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Mikhail Kurnosov
 
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Mikhail Kurnosov
 
S2 boolean amp-amp_complex_gates
ssuser3ad198
 
6.2 Шаблоны функций
DEVTYPE
 
ОПК № 2 – Алгоритмы и структуры данных, язык C
Vladimir Parfinenko
 
Программирование. Лекция 3
Andrei V, Zhuravlev
 
Haskell Type System with Dzmitry Ivashnev.
Sergey Tihon
 
4.3 Виртуальные методы
DEVTYPE
 
S3 karnaugh maps-full
ssuser3ad198
 
4.4 Таблица виртуальных методов
DEVTYPE
 
презентация лекции №10
student_kai
 
Обработка текста на Haskell - это просто!
Mike Potanin
 
Представление графов в памяти компьютера (c++).
Olga Maksimenkova
 
S3 karnaugh maps-short
ssuser3ad198
 
алфавит
anastastish
 
Системы счисления
Andrey Dolinin
 
Урок 17. Паттерн 9. Смешанная арифметика
Tatyanazaxarova
 
Ad

Viewers also liked (20)

PPTX
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
Pavel Tsukanov
 
PPT
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
Pavel Tsukanov
 
PPTX
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
Pavel Tsukanov
 
PPTX
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Pavel Tsukanov
 
PPTX
Sql azure federations
Pavel Tsukanov
 
PPTX
RESPONSIVE WEB DESIGN
Pavel Tsukanov
 
PPTX
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Pavel Tsukanov
 
PPTX
Thinking in parallel ab tuladev
Pavel Tsukanov
 
PPTX
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
Pavel Tsukanov
 
PPTX
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
Pavel Tsukanov
 
PPTX
Введение в Knockout
Pavel Tsukanov
 
PPTX
Unit tests
Pavel Tsukanov
 
PDF
Domain-Driven Design: Модель вместо требований
CUSTIS
 
PPTX
TDD (Test-driven Development) как стиль разработки.
Pavel Tsukanov
 
PPTX
PaaS и SaaS
Pavel Tsukanov
 
PPTX
Автоматизированное тестирование UI на C# + Selenium WebDriver
Pavel Tsukanov
 
PPTX
Реализация REST и SOAP сервисов с помощью WCF
Pavel Tsukanov
 
PPT
Лекция Android
Pavel Tsukanov
 
PPTX
Domain Driven Design
Pavel Tsukanov
 
PPTX
Ruby - или зачем мне еще один язык программирования?
Pavel Tsukanov
 
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
Pavel Tsukanov
 
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
Pavel Tsukanov
 
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
Pavel Tsukanov
 
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Pavel Tsukanov
 
Sql azure federations
Pavel Tsukanov
 
RESPONSIVE WEB DESIGN
Pavel Tsukanov
 
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Pavel Tsukanov
 
Thinking in parallel ab tuladev
Pavel Tsukanov
 
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
Pavel Tsukanov
 
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
Pavel Tsukanov
 
Введение в Knockout
Pavel Tsukanov
 
Unit tests
Pavel Tsukanov
 
Domain-Driven Design: Модель вместо требований
CUSTIS
 
TDD (Test-driven Development) как стиль разработки.
Pavel Tsukanov
 
PaaS и SaaS
Pavel Tsukanov
 
Автоматизированное тестирование UI на C# + Selenium WebDriver
Pavel Tsukanov
 
Реализация REST и SOAP сервисов с помощью WCF
Pavel Tsukanov
 
Лекция Android
Pavel Tsukanov
 
Domain Driven Design
Pavel Tsukanov
 
Ruby - или зачем мне еще один язык программирования?
Pavel Tsukanov
 
Ad

Similar to СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++ (20)

PDF
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Dima Dzuba
 
PDF
Step cpp0201
Evgenij Laktionov
 
PPT
Rgsu04
EvgeniyaOstr
 
PPT
Rgsu04
EvgeniyaOstr
 
PDF
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Yandex
 
PDF
Семинар 11. Параллельное программирование на MPI (часть 4)
Mikhail Kurnosov
 
ODP
C language. Introduction
Alexey Bovanenko
 
PDF
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Yandex
 
ODP
About Python
Yury Yurevich
 
PPTX
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 
PPTX
ADD 2011: Статический анализ Си++ кода
Andrey Karpov
 
PPTX
Статический анализ Си++ кода
Tatyanazaxarova
 
PPTX
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Sergey Platonov
 
PDF
Большой брат помогает тебе
Tatyanazaxarova
 
PDF
msumobi2. Лекция 1
Глеб Тарасов
 
PDF
Web осень 2013 лекция 2
Technopark
 
PPTX
Принципы работы статического анализатора кода PVS-Studio
Andrey Karpov
 
PPTX
Эффективный C++
Andrey Karpov
 
PPTX
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Yandex
 
PDF
Урок 13. Паттерн 5. Адресная арифметика
Tatyanazaxarova
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Dima Dzuba
 
Step cpp0201
Evgenij Laktionov
 
Rgsu04
EvgeniyaOstr
 
Rgsu04
EvgeniyaOstr
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Yandex
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Mikhail Kurnosov
 
C language. Introduction
Alexey Bovanenko
 
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Yandex
 
About Python
Yury Yurevich
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 
ADD 2011: Статический анализ Си++ кода
Andrey Karpov
 
Статический анализ Си++ кода
Tatyanazaxarova
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Sergey Platonov
 
Большой брат помогает тебе
Tatyanazaxarova
 
msumobi2. Лекция 1
Глеб Тарасов
 
Web осень 2013 лекция 2
Technopark
 
Принципы работы статического анализатора кода PVS-Studio
Andrey Karpov
 
Эффективный C++
Andrey Karpov
 
Некоторые паттерны реализации полиморфного поведения в C++ – Дмитрий Леванов,...
Yandex
 
Урок 13. Паттерн 5. Адресная арифметика
Tatyanazaxarova
 

More from Pavel Tsukanov (11)

PPTX
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
Pavel Tsukanov
 
PPTX
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
Pavel Tsukanov
 
PPTX
СОЗДАЙ РОБОТА С НУЛЯ
Pavel Tsukanov
 
PPT
ВВЕДЕНИЕ В NODE.JS
Pavel Tsukanov
 
PPTX
АНИМАЦИЯ В FLASH И HTML5
Pavel Tsukanov
 
PPT
ХАКЕРЫ И АНТИХАКЕРЫ
Pavel Tsukanov
 
PPTX
ЗАРАБОТОК В ИНТЕРНЕТЕ.
Pavel Tsukanov
 
PPT
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
 
PPTX
Как писать красивый код или основы SOLID
Pavel Tsukanov
 
PPTX
Статический анализ кода
Pavel Tsukanov
 
PPTX
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Pavel Tsukanov
 
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
Pavel Tsukanov
 
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
Pavel Tsukanov
 
СОЗДАЙ РОБОТА С НУЛЯ
Pavel Tsukanov
 
ВВЕДЕНИЕ В NODE.JS
Pavel Tsukanov
 
АНИМАЦИЯ В FLASH И HTML5
Pavel Tsukanov
 
ХАКЕРЫ И АНТИХАКЕРЫ
Pavel Tsukanov
 
ЗАРАБОТОК В ИНТЕРНЕТЕ.
Pavel Tsukanov
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
 
Как писать красивый код или основы SOLID
Pavel Tsukanov
 
Статический анализ кода
Pavel Tsukanov
 
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Pavel Tsukanov
 

СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++

  • 1. Жив ли Си++? Прошлое, настоящее, будущее. Карпов Андрей Николаевич к.ф.-м.н., MVP (Visual C++), технический директор ООО «СиПроВер» Сайт: www.viva64.com E-Mail: [email protected]
  • 2. Умер ли Си/Си++? Нет. Он одна из важных технологий. Просто технологий стало больше!
  • 3. • Кода на Си/Си++ в старых и новых системах не стало меньше. • Выросло количество разрабатываемых систем, где рационально использовать другие языки (web, мобильные телефоны, клиентские программы). • Аналогия с бумагой. Кажется, компьютерные технологии повсеместно могут заменить бумагу.
  • 4. Говорить «стало меньше Си++» как говорить «меньше стала использоваться бумага» • Государственные учреждения. Куда ставить печать и подпись? • Надежность (архивы, военное дело). • Бумажные книги не исчезли. • Комиксы, раскраски для детей, оригами. • Как поможет iPhone в туалете?
  • 5. Закрывать бумажную фабрику смысла нет. А стоит ли продолжать заниматься Си/Си++? Да. Это приносит деньги. Поговорим, почему это приносит деньги.
  • 6. Почему язык Си/Си++ ещё очень долго будет популярен • Инерция; • Ресурсоемкие вычисления; • Экономия энергии; • Ограничения встраиваемых и мобильных систем; • Новые языки приходят и уходят, а Си/Си++ остаётся.
  • 7. Инерция • Существуют такие продукты, как «CHARON- PDP11 for Windows» для поддержки PDP11. Компания Stromasys - www.stromasys.ch • Неудача Intel c 64-битной архитектурой Itanium. • Огромное количество БОЛЬШИХ библиотек. Пример: библиотека ACIS.
  • 8. Ресурсоемкие вычисления • Активно используется Фортран. Си/Си++ рассматриваются для таких задач в перспективе. Intel активно работает над включением матриц в стандарт языка Си++. • Си/Си++ позволяют максимально полно использовать доступную память. • Си самый быстрый (после Фортрана). Не верьте рекламным измерениям скорости.
  • 9. Экономия энергии • Макро. Для датацентра с тысячами обращений в секунду важно, работает алгоритм 100 или 150 микросекунд. • Микро. Важно для встраиваемых систем, работающих долгое время.
  • 10. Ограничения встраиваемых и мобильных систем • Нужно работать быстро, чтобы уменьшить потребление энергии. • Ограничения объема памяти. • Новое направление – робототехника на дому. • Лучше потратить деньги на оптимизацию ПО, чем увеличить стоимость аппаратной части миллионов устройств.
  • 11. Новые языки приходят и уходят, а Си/Си++ остаётся C++ Applications: http://www.stroustrup.com/applications.html • Adobe Systems: Photoshop, Acrobat, Illustrator, ... • Apple: OS X (разные языки, но в основном Си++) • Autodesk: различные CAD системы • CERN: Data analysis • Facebook: Several high-performance and high- reliability components. • Google: Chromium, MapReduce, Google file system. • Microsoft: Windows, Microsoft Office, ... • Mozilla: Firefox, Thunderbird • ...
  • 12. Си/Си++ не только жив, но и постоянно развивается
  • 13. О новом в языке (будем говорить только про Си++)
  • 14. Делегирующие конструкторы class File { public: File(char const * filename, char const * mode) : file_(fopen(filename, mode)) { } ~File() { fclose(file_); } Теперь нам хочется сделать что-то сложное в конструкторе, что может бросить исключение.
  • 15. Делегирующие конструкторы class File { File(FILE * file) : file_(file) {} public: File(char const * filename, char const * mode) : File(fopen(filename, mode)) { Foo(); } Другое применение – можно избавиться от функции Init().
  • 16. Диапазонный for, auto, списки инициализации auto x = A * B; std::vector<string> string_array = { "aa", "bb" }; for (auto s : string_array) { cout << s << endl; } for (const auto x : { 1,2,3,5,8,13,21,34 }) cout << x << 'n';
  • 17. Управление поведением по умолчанию: default и delete Сейчас стандартная идиома «запрета копирования» может быть явно выражена следующим образом: class X { … X& operator=(const X&) = delete; X(const X&) = delete; И наоборот, мы можем явно сказать о том, что хотим использовать поведение копирования по умолчанию: class Y { … Y& operator=(const Y&) = default; Y(const Y&) = default;
  • 18. enum class – строго типизированные перечисления Объявления “enum class Color { red, blue };” решают проблемы: • Стандартные перечисления (enums) могут неявно преобразовываться к int. • Стандартные перечисления экспортируют свои значения в окружающую область видимости, что приводит к коллизиям имен. • Невозможно указать тип, лежащий в основе стандартных перечислений.
  • 19. сonstexpr – обобщенные гарантировано константные выражения constexpr int Foo(int a, int b) { constexpr int tmp = a + 10; return tmp | b; } int x = Foo(1, 2);
  • 20. decltype – тип выражения void f(const vector<int>& a, vector<float>& b) { typedef decltype(a[0]*b[0]) Tmp; for (int i=0; i<b.size(); ++i) { Tmp* p = new Tmp(a[i]*b[i]); // ... } // ... }
  • 21. Инициализация членов класса при объявлении class A { public: int a = 7; }; Эквивалентно: class A { public: int a; A() : a(7) {} };
  • 22. Статические утверждения static_assert( sizeof(long)>=8, "64-bit code generation required for this library." );
  • 23. nullptr - литерал для задания нулевого указателя void f(int); void f(char*); f(0); // вызов f(int) f(nullptr); // вызов f(char*)
  • 24. Шаблоны с переменным числом параметров template<typename T, typename... Args> void printf(const char* s, T value, Args... args) { while (s && *s) { if (*s=='%' && *++s!='%') { std::cout << value; return printf(++s, args...); } std::cout << *s++; } }
  • 25. Лямбда-выражения std::sort(v.begin(), v.end(), [](int a, int b) { return abs(a)<abs(b); }); vector<int> myList; int total = 0; for_each(myList.begin(), myList.end(), [&total](int x) { total += x; }); std::cout << total; auto myFunc = [this]() { this->PrivateMemberFunc (); };
  • 26. Другое • Rvalue ссылки && • Пользовательские литералы • Атрибуты **…++ • Класс array: array<int,6> a = { 1, 2, 3 }; • …
  • 27. Дополнительные ссылки • C++ 11 FAQ от Бьярна Страуструпа (перевод) http://sergeyteplyakov.blogspot.com/2012/05 /c-11-faq.html • «Универсальные» ссылки в C++11 или T&& не всегда означает «Rvalue Reference» http://habrahabr.ru/post/157961/