Архив категорий:C++

GCC требует открытого конструктора копирования для C++98

В одной из своих прошлых статей я рассказывал, что при возврате объектов GCC не использует конструктор копирования, сразу размещая объекты там, где они должны располагаться. Однако, в некоторых случаях GCC требует наличия открытого конструктора копирования. Продолжить чтение →

Не используйте std::move при возврате объектов

Конструкторы и операторы перемещения являются важным нововведением С++11. Про них много написано, и я не стану повторять основы. Вместо этого я хотел бы сосредоточиться на таком вопросе, как возвращение объектов. Нужно ли для этого использовать функцию std::move или нет? Продолжить чтение →

__cplusplus в разных компиляторах

Макрос __cplusplus изначально создавался для предоставления программистам возможности определения факта использования компилятора С++. Это было нужно для создания кода, который мог бы компилироваться как «новыми» (на то время) компиляторами С++, так и старыми для языка С. В частности он используется для отключения украшения имён (если нужно). Продолжить чтение →

Объявление переменных в конструкции case

Я всегда советую максимально ограничивать область видимости переменных. Это значительно упрощает сопровождение программы и предотвращает многие ошибки. Самый распространенный вариант такого ограничения — конструкция for. С ней обычно не возникает проблем. Сегодня же я хотел поговорить о конструкции switchcase Продолжить чтение →

Лишние скобки меняют тип переменной

Как дополнительные круглые скобки могут сказаться на типе переменной? Я, если честно, никогда не задумывался над этим. Нет, я конечно слышал про перегрузку оператора (), но сейчас не об этом. Несколько дней назад мое невнимательное отношение к круглым скобкам привело к ошибке, найти которую удалось не сразу. Продолжить чтение →

Неоднозначность при использовании reverse_iterator и const_reverse_iterator

Итераторы reverse_iterator и const_reverse_iterator предназначены для перечисления элементов контейнера в обратном порядке (от конца к началу). Об этом написано в любой более или менее приличной книге по С++. Но есть ряд моментов, о которых там умалчивают. Один из них связан с неоднозначностью, возникающей при работе с обратными итераторами. Продолжить чтение →

Пара слов в защиту goto

Все программисты знают, что использовать оператор goto — моветон. Объясняют это обычно тем, что он сильно запутывает код и делает его трудно читаемым. Это так. Но в некоторых случаях с помощью него можно избежать нежелательного дублирования кода. Продолжить чтение →

Дружественная функция для шаблонного класса

При работе в С++ время от времени приходится создавать свои собственные шаблоны. Их синтаксис описывается в любой более-менее приличной книге по С++. Но правильное объявление дружественной функции может вызвать трудности. Продолжить чтение →

О размере типов int и long

Типы int и long (он же long int) хорошо знакомы каждому программисту C/C++. Их размер и диапазон возможных значений описываются в каждой книге по С/С++. Но оказывается то, что написано в книгах не всегда соответствует действительности. Продолжить чтение →