Возможности c++11

Недавно узнал о нескольких новых возможностях с++11. Они настолько удобные, что непонятно, как я раньше о них не узнал.

range-based циклы

Если у объекта есть методы begin() и end(), то вместо обычного for с итераторами можно использовать такой:

std::vector<int> vec;
//наполняем вектор значениями
for (auto& it: vec)
{
	//делаем все что нужно
}

Подходит это способ не всегда, т.к. внутри цикла мы ничего не знаем о позиции элемента в контейнере.

auto

Ключевое слово auto позволяет не указывать тип переменной, разрешая компилятору самому вычислить тип. Как в примере выше вместо std::vector<int>::const_iterator.

nullptr

Ключевое nullptr слово специального типа std::nullptr_t. Сущестуют неявные преобразования к нулевому указателю любого типа. Подробнее.

raw string literal

Позволяет не экранировать символы. Использование показано в следующем примере в конструкторе регулярного выражения. Подробности.

regex

Регулярные выражения. Просто приведу пример того как я использовал. Необходимо было вытащить данные о загрузке сети из /proc/net/dev:

std::ifstream stream;
std::regex rgx(R"%(^.*(lo|eth\d):\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+\d+\s+\d+\s+\d+\s+\d+\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+\d+\s+\d+\s+\d+\s+\d+.*$)%");
std::smatch m;
stream.open("/proc/net/dev", std::fstream::in);
if (stream.fail())
{
	return -1;
}
while (!stream.eof())
{
	std::getline(stream, tempString);
	std::regex_match(tempString, m, rgx);

	if (m.empty())
		continue;

	//достаем из массива m все что нам нужно.
}

Подробнее можно почитать тут. Тут следует отметить, что в gcc нормальная поддрежка регулярных выражений появилась начиная с версии 4.9, версия 4.8 бросала исключения из конструктора.

остальное

Также в стандарте появлись еще некоторые интересные вещи: лямбда-функции, constexpr(спецификатор указывающий на возможность вычисления во время компиляции), static_assert (кидает ошибку компиляции, если не выполнилось условие), final и override спецификаторы виртуальных функций и наверное что-то еще. Из перечисленных в прошлом предложени использовал лямбды, про остальное только читал.

Плюсануть
Поделиться

,
Плагин спойлер для Jekyll ← ctrl → brother hl-2130 и linux