fa
Feedback

فریب کلاهبرداران را نخورید! تل‌متریو این کانال‌ها را شناسایی و برچسب‌گذاری می‌کند 👉 برای مشاهده برچسب، اشتراک تهیه کنید

C++ geek

C++ geek

رفتن به کانال در Telegram

Учим C/C++ на примерах

نمایش بیشتر
3 503
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-27 روز
-2630 روز
آرشیو پست ها
Что такое класс хранения? Класс, который определяет срок существования, компоновку и расположение переменных/функций в памяти. В C ++ поддерживаются такие классы хранения: auto, static, register, extern и mutable. Обратите внимание, что register устарел для C++11. Для C++17 он был удален и зарезервирован для будущего использования. ➡️ @cpp_geek

Инициализатор в if и switch Вам должна понравиться такая возможность из С++17. Теперь вы можете выполнять инициализацию перем
Инициализатор в if и switch Вам должна понравиться такая возможность из С++17. Теперь вы можете выполнять инициализацию переменных и проверять условие внутри if или switch. Это даёт сделать код более лаконичным и чистым. Общая форма: if (init-statement(x); condition(x)) { // some code } else { // в else тоже видно x // some more code } ➡️ @cpp_geek

nullptr Раньше, для обнуления указателей использовался макрос NULL, являющийся нулем — целым типом, что, естественно, вызывал
nullptr Раньше, для обнуления указателей использовался макрос NULL, являющийся нулем — целым типом, что, естественно, вызывало проблемы (например, при перегрузке функций). Ключевое слово nullptr имеет свой собственный тип std::nullptr_t, что избавляет нас от бывших проблем. Существуют неявные преобразования nullptr к нулевому указателю любого типа и к bool (как false), но преобразования к целочисленных типам нет. ➡️ @cpp_geek

Что за оператор −−> в С++? Это старый хитрый вопрос. В С++ нет оператора −−>. Рассмотрим такой код: if (p−−>m == 0) f(p); Выглядит так, как будто и правда есть оператор −−>, и если правильно объявить переменные p и m, то код даже скомпилируется и запустится: int p = 2; int m = 0; if (p−−>m == 0) f(p); Это означает: если p−− больше чем m (а это так), то надо сравнить результат (true) с нулём. Ну, true != 0, так что результат всего выражения — false, и функция f() не вызовется. Другими словами: if ((p−−) > m == 0) f(p); Пожалуйста, не тратьте много времени на подобные вопросы. Они сбивали с толку новичков ещё до того, как появился С++. ➡️ @cpp_geek

Cтрого-типизированный enum У «традиционных» перечислений в С++ есть некоторые недостатки: они экспортируют свои значения в ок
Cтрого-типизированный enum У «традиционных» перечислений в С++ есть некоторые недостатки: они экспортируют свои значения в окружающую область видимости (что может привести к конфликту имен), они неявно преобразовываются в целый тип и не могут иметь определенный пользователем тип. Эти проблемы устранены в С++11 с введением новой категории перечислений, названных strongly-typed enums. Они определяются ключевым словом enum class. Они больше не экспортируют свои перечисляемые значения в окружающую область видимости, больше не преобразуются неявно в целый тип и могут иметь определенный пользователем тип (эта опция так же добавлена и для «традиционных» перечислений"). ➡️ @cpp_geek

Функция all_of Эта функция работает со всем диапазоном элементов массива и может сэкономить время на запуск цикла для проверк
Функция all_of Эта функция работает со всем диапазоном элементов массива и может сэкономить время на запуск цикла для проверки каждого элемента по одному. Она проверяет заданное свойство для каждого элемента и возвращает true, когда каждый элемент в диапазоне удовлетворяет указанному свойству, иначе возвращает false. В приведенном выше коде отрицательный элемент -6 отрицает условие и возвращает false. ➡️ @cpp_geek

init внутри if и switch Эта возможность C++17 мне полюбилась сразу же, как только я узнал о ней. Теперь вы можете инициализир
init внутри if и switch Эта возможность C++17 мне полюбилась сразу же, как только я узнал о ней. Теперь вы можете инициализировать переменные и проверять условия сразу же внутри блоков if и switch. Это помогает сохранять код понятным и чистым. ➡️ @cpp_geek

В С++11 появилась такая классная штука, как цикл for, основанный на диапазоне. Например, вам не придётся писать for (int i =
В С++11 появилась такая классная штука, как цикл for, основанный на диапазоне. Например, вам не придётся писать for (int i = 0; i < v.size(); i++), потому что теперь есть for (auto &e : v). Он очень полезен при обходе std::set или std::map. ➡️ @cpp_geek

В чем разница между указателем и ссылкой в C++? Указатель может быть переназначен n-раз, в то время как ссылка не может быть переназначена после бинда. Указатели могут указывать в NULL, тогда как ссылка всегда ссылается на объект. Программист не может получить адрес ссылки, как это возможно с указателями, но можно взять адрес объекта, на который указывает ссылка, и выполнить действия с ним. ➡️ @cpp_geek

Могут ли статичные функции быть виртуальными в С++? В C++ статическая функция-член класса не может быть виртуальной. Виртуаль
Могут ли статичные функции быть виртуальными в С++? В C++ статическая функция-член класса не может быть виртуальной. Виртуальные функции вызываются, когда у вас есть указатель или ссылка на экземпляр класса. Статические функции не привязаны к экземпляру класса, но они привязаны к самому классу. C++ не имеет указателей на класс, поэтому нет сценария, в котором вы могли бы виртуально вызвать статическую функцию. Например, программа с картинки в примере 1 выдаст ошибку во время компиляции. Кроме того, статическая функция-член класса не может иметь одновременно идентификаторы const и volatile. Код из примера 2 тоже не скомпилируется. ➡️ @cpp_geek

forward_list::unique() в C++ STL forward_list::unique() — это встроенная функция в C++ STL, которая удаляет все последователь
forward_list::unique() в C++ STL forward_list::unique() — это встроенная функция в C++ STL, которая удаляет все последовательные повторяющиеся элементы из forward_list. Для сравнения используется бинарный предикат. ➡️ @cpp_geek

Бесконечный цикл Для чего? Когда while(true), while(1), for(;;) и прочие стандартные пути создания цикла кажутся не слишком и
Бесконечный цикл Для чего? Когда while(true), while(1), for(;;) и прочие стандартные пути создания цикла кажутся не слишком информативными, можно использовать подобный макрос. Единственный плюс который он дает — чуть лучшую читаемость кода. ➡️ @cpp_geek

В чем отличие malloc от new? Ответ: malloc — выделение блока памяти в стиле Си, опасное с точки зрения приведения типов (non-typesafe), т.к. возвращает void * и требует обязательного приведения. new — выделение блока памяти и последующий вызов конструктора, безопасное с точки зрения приведения типов (typesafe), т.к. тип возвращаемого значения определен заранее. ➡️ @cpp_geek

Неиспользуемые переменные Подобный макрос есть, например, в cocos2d-x, там он называется CC_UNUSED_PARAM. Из недостатков: тео
Неиспользуемые переменные Подобный макрос есть, например, в cocos2d-x, там он называется CC_UNUSED_PARAM. Из недостатков: теоретически, он может работать не на всех компиляторах. Тем не менее, в cocos2d-x он для всех платформ определен абсолютно одинаково. Для чего? Этот макрос позволяет избежать предупреждения о неиспользуемой переменной, а читающему код он как бы говорит: «тот кто писал это — знал, что переменная не используется, все в порядке». ➡️ @cpp_geek

Объединения тоже могут быть шаблонами Еще одна вещь, о которой знают немногие, это то, что объединения тоже могут быть шаблон
Объединения тоже могут быть шаблонами Еще одна вещь, о которой знают немногие, это то, что объединения тоже могут быть шаблонами. У них также могут быть конструкторы и функции-члены. Ничего общего с наследованием (включая виртуальные функции). ➡️ @cpp_geek

Корень числа Дано действительное число a и натуральное n. Вычислите корень n-й степени из числа a, используя вещественный бин
Корень числа Дано действительное число a и натуральное n. Вычислите корень n-й степени из числа a, используя вещественный бинарный поиск. Формат входных данных: С клавиатуры через пробел вводится два числа: 1. a – действительное, неотрицательное, не превосходит 1000, задано с точностью до 6 знаков после десятичной точки; 2. n – натуральное, не превосходящее 10. Формат выходных данных: Требуется вывести число с точностью не менее 6 знаков после запятой. ➡️ @cpp_geek

Объявление классов и функций В init части цикла for можно объявлять не одни лишь переменные. Здесь также можно разместить кла
Объявление классов и функций В init части цикла for можно объявлять не одни лишь переменные. Здесь также можно разместить классы и функции. Благодаря этому можно использовать множество переменных с разными типами. ➡️ @cpp_geek

Быстрая сортировка Отсортируйте заданный массив с помощью быстрой сортировки. Формат входных данных: Первая строка входных да
Быстрая сортировка Отсортируйте заданный массив с помощью быстрой сортировки. Формат входных данных: Первая строка входных данных содержит одно натуральное число nn (1 ≤ n ≤ 10^5) – количество элементов в массиве. В следующей строке находятся элементы массива – n целых чисел, не превосходящих по абсолютной величине 10^9. Формат выходных данных: Выведите элементы массива в порядке неубывания. ➡️ @cpp_geek

Структура представлена в виде массива f, в котором f[i] – сумма всех элементов от F[i] до i. Функция F(x) связана с битовым п
Структура представлена в виде массива f, в котором f[i] – сумма всех элементов от F[i] до i. Функция F(x) связана с битовым представлением аргумента. Вкратце можно описать так: F(x) заменяет группу единичных битов, находящихся в конце числа (младших) на нули. Если x заканчивается на нулевой бит, то F(x) = x. В битовых операциях F(x) задаётся так: F(x) = x & (x + 1). Нам понадобятся три функции: прибавление x к элементу с индексом i, получение суммы дерева от 0до xи получение суммы на [a..b]. ➡️ @cpp_geek

Инициализация в двоичной форме В C++ 11 присваивания также могут выполняться в двоичной форме. ➡️ @cpp_geek
Инициализация в двоичной форме В C++ 11 присваивания также могут выполняться в двоичной форме. ➡️ @cpp_geek