Сообщество - Лига программистов C/C++

Лига программистов C/C++

65 постов 4 798 подписчиков

Популярные теги в сообществе:

Замолвим за typename

Читаю сейчас Саттера и нашел у него такую задачу

Замолвим за typename Саттер, Программирование, Задача

Утверждается, что компилятор не справится с instantiated_type, потому что непонятно тип это или еще что. Однако VS2015 все проглатывает.

Предлагается в сигнатуре метода добавить typename, чтобы явно указать использование типа.
Книга старая, 2005 года. Это стандарт так наисправляли или автор оплошал?

38

C++ constexpr

C++ 11 добавил много всего интересного, но сегодня речь пойдет о constexpr. Концептуально constexpr указывает значение, которое не просто является константой, но и известно во время компиляции. Поэтому если требуется, чтобы переменная была известна на этапе компиляции, то смело помечаем ее constexpr, потому что простой const таких гарантий не дает.

Теперь поговорим про функции. Данное ключевое слово можно применять к функциям, например:

C++ constexpr C++, Constexpr, Факториал, Длиннопост

Однако, constexpr-функция не обязана(!) давать константный результат или результат, известный во время компиляции. Все зависит от входных аргументов - если они известны на этапе компиляции, то функция работает как задумано, иначе она работает как обычная функция (ошибки компиляции нет). Это следует помнить. Благодаря этому можем писать код наподобие следующего:

C++ constexpr C++, Constexpr, Факториал, Длиннопост

По-моему круто! Тем самым можно посчитать что-то на этапе компиляции, например, факториал. Да - да, изъезженный пример, но что поделаешь - это классика. Вот как их можно реализовать:

C++ constexpr C++, Constexpr, Факториал, Длиннопост

Почему две разные реализации? Потому что в constexpr в C++11 имеет больше ограничений по сравнению с C++14. Подробнее уже можно почитать на cppreference.com, не буду делать copy-paste.

Ну и напоследок. Нам заполнить массив некоторыми значениями на этапе компиляции. Как будем это делать? Для наглядности возьму тот же факториал.

C++ constexpr C++, Constexpr, Факториал, Длиннопост

Темная уличная шаблонная магия). На самом деле ничего сложного здесь нет, разве что variadic templates, но они хорошо описаны у С. Прата. Проверить работу кода можно здесь: http://rextester.com/KGUP58147.


Наверняка читатель может задать вопрос - зачем мне это? Тут я скажу, что вы сами должны

решать использовать такие возможности языка или нет. Я лишь рассказал о такой штуке - переносе части вычислений из run-time в compile-time.


Для подготовки текста использовались материалы из книги замечательного автора S. Meyers "Effective Modern C++".

Показать полностью 3
14

Статические переменные вместо глобальных на Си/Си++

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

Есть простой способ избавиться от большинства глобальных переменных.

Статические переменные вместо глобальных на Си/Си++ Си++, Си, C++, Программирование

Переменная A располагается в глобальной области памяти, но имеет локальную область видимости (в пределах функции fun). То есть переменная сохраняет свое значение между вызовами функции. Начальное значение переменной равно 10.

Этот способ не годится, если функциям нужно обмениваться данными, например, обработчику прерывания с основной программой. Это решается созданием глобальной переменной в отдельном файле. Ниже приведен код такого файла.

Статические переменные вместо глобальных на Си/Си++ Си++, Си, C++, Программирование

Область видимости переменной A — только этот файл. Никаким способом к ней нельзя получить доступ из других файлов. Функции setA и getA позволяют получить и установить значение переменной.

На Си++ переменную дополнительно можно обернуть классом.

Показать полностью 1

Простая задачка по C++

На этот раз действительно простая и действительно по С++. Чтоб решить, нужно знать про ввод вывод и файловый в часности.

Итак, дано:

http://pastebin.com/rjPcfqgv

Задача:

Почему в файл выводится сначала "second string", а затем "first string"? И как это исправить?


Проверить можно тут:

http://www.tutorialspoint.com/compile_cpp_online.php?PID=0Bw_CjBb95KQMSVJoNDFzSVRMaTg

жмакаем компиле, экзекьюте и пишем в консоль cat file чтоб увидеть содержимое файла.


P.S. на всякий случай скажу, что код с ошибкой и использовать его в продакшене да и вообще хоть где-нибудь нельзя.

4

Ищу книги...

Господа! Ищу книги: Айвор Хортон - Visual C++ 2010. Полный курс  и  Буч Гради Объектно-ориентированный анализ и проектирование с примерами приложений на С++. Возможно кто-то их уже перерос, я бы с удовольствием купил. Скачать не проблема, но хотелось бы завладеть в бумажном виде.

209

Стилистические Войны программистов ( Часть 2 )

Мой предыдущий пост посвященный стилистическим войнам программистов к большому удивлению был очень тепло встречен пикабушниками и привел к немалому числу оживленных обсуждений в комментариях. :)

Поэтому я решил воплотить в жизнь еще пару-тройку жизненных картинок в этой тематике :)


// [0]

Стилистические Войны программистов ( Часть 2 ) Программирование, C++, Юмор, Длиннопост

// [1]

Стилистические Войны программистов ( Часть 2 ) Программирование, C++, Юмор, Длиннопост

// [2]

Стилистические Войны программистов ( Часть 2 ) Программирование, C++, Юмор, Длиннопост

// [3]

Стилистические Войны программистов ( Часть 2 ) Программирование, C++, Юмор, Длиннопост

И бонусная версия для особых почитателей моды:

Стилистические Войны программистов ( Часть 2 ) Программирование, C++, Юмор, Длиннопост
Показать полностью 5
1994

Стилистические Войны программистов

Когда-то давным давно я склепал и залил в инет несколько юмористических картинок касательно стилистики написания кода на C++, которые мгновенно разлетелись и вызвали тогда много срача жарких дискуссий на эту тему... И вот перерывая свои старые и пыльные архивы я сейчас снова на них случайно наткнулся. Поэтому решил поделиться с вами полной подборкой. :)

Не сочтите за баян, надеюсь, что кого-нибудь вдохновит и он выложит в комментариях свои достойные варианты на эту тему :))

// [0]

Стилистические Войны программистов Программирование, C++, Юмор, Длиннопост

// [1]

Стилистические Войны программистов Программирование, C++, Юмор, Длиннопост

// [2]

Стилистические Войны программистов Программирование, C++, Юмор, Длиннопост

// [3]

Стилистические Войны программистов Программирование, C++, Юмор, Длиннопост

А вот вариант от некоего пользователя под ником Ges( если ты есть на Пикабу, то респект тебе - долго смеялся с твоей картинки :)) )

Стилистические Войны программистов Программирование, C++, Юмор, Длиннопост

P.S. Баянометр ругался на одну отдельно выложенную картинку :)

Показать полностью 5

Сколько нужно времени, чтобы уложить теплый пол?

Точно не скажем, но в нашем проекте с этим можно справиться буквально за минуту одной левой!

Попробовать

Какая IDE лучше для разработки на C++?

Подскажите, какая вам больше нравится и почему?

Отличная работа, все прочитано!