Ответ: [TrueHorror] - разработка
Да С++11 это почти новый язык, если будешь только фичи добавлять с существующий код -- не раскроешь весь потенциал.
Страуструп в 4 издании говорит что нужно архитектурно новые подходы делать, тогда новые фичи будут как можно лучше ложиться в общий контекст задуманного.
Вообще из своей практики еще могу добавить:
override -- удобно помечать виртуальные функции, чтобы случайно при опечатке не создать похожую, но не виртуальную функцию. Компилятор скажет что такой функции в базовом классе нет.
final -- помечать класс что он финальный, в этом случае можно не делать деструктор virtual (обычно делали, чтобы не забыть когда начнешь наследовать), теперь если попытаешься наследовать то нужно будет убрать final, и сразу автоматически это напоминает проверить деструктор на virtual.
списки инициализации -- теперь переменные рекомендуется инициализировать вот так:
int a { 10 };
потому что у списков инициализации более строгая типизация, и например в данном случае:
char a { 257 };
будет ошибка, и ты не накосячишь с переполнением значения.
К тому же списки инициализаций напрямую инициализируют переменную без промежуточных присваиваний.
Тоже относиться к классам.
Также полезны variadic templates -- они заменяют собой функции с переменным числом аргументов. Не часто, но кое-где я нашел им применение.
Ексепшены стали удобней и быстрее.
Например можно оформить конструктор так:
B::B( void ) try : A() { //code } catch ( const except& ex ) { //deinit throw; }
Таким образом мы в случае неудачи восстанавливаем состояние объекта локально, затем передаем ексепшен вызывающему коду, для более глобальных действий. Под try попадает также и конструктор базового класса.
Еще в классах можно создавать конструкторы перемещения и операторы присваивания с перемещением -- однако я пока не нашел им широкого применения.
Ещё, раньше чтобы скрыть конструктор копирования и оператор присваивания (обычные) не писали их тело, таким образом компилятор выдавал ошибку компиляции, теперь же можно помечать такие функции A( const A& a ) = delete;
Лямбда местами удобно использовать, например при обобщении кода внутри функций.
Применение библиотеки стало намного лучше и читабельней.
Так что теперь имхо её можно применять чаще, даже внутри движка, за исключением очень критических к производительности мест.
Вот но в общем если относиться к С++11 только как к дополнительным фичам, не получится раскрыть его возможности полностью.
|