Библиотека собеса по C++ | вопросы с собеседований
4.68K subscribers
387 photos
2 videos
168 links
Вопросы с собеседований по C++ и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9ccf302b

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
💣 Как отключить вывод предупреждений о неиспользуемых переменных?

Бывают ситуации, когда приходится пользоваться сторонним кодом (например библиотеками). В нём могут оставаться не используемые переменные, оставленные по той или иной причине. Компилятор на такого рода вещи выдаёт предупреждения

Что бы вывод компиляции не захламлялся данного рода сообщениями, и было проще читать полезные предупреждения, есть специальный флаг (-Wno-unused-variable)

Флаг компилятора -Wno-unused-variable используется для отключения предупреждений, связанных с неиспользуемыми переменными во время компиляции программы
🧨 Что делает std::iota?

std::iota — алгоритм из стандартной библиотеки C++. С его помощью можно заполнять последовательности диапазоном значений, начиная с начального значения и до конца заполняемой структуры

Если выбрать начальное значение за 1, то последовательность будет: 1, 2, 3, 4, 5,...
🧨 Для чего нужен принцип подстановки Лисков?


Принцип подстановки Лисков (Liskov substitution principle) — третий принцип SOLID
• У класса S отнаследованного от T должна быть возможность применяться там, где ожидается T. При этом ожидается, что программа адекватно будет работать
• Идея принципа в том, что контракт (он же функционал), который гарантирует предок должен выполняться и в наследнике
🧨 Как преобразовать std::vector в массив?

Это довольно просто сделать. Достаточно просто разыменовать первый элемент вектора

std::vector<int> vec = {1, 2 , 3};
int* arr = &vrc[0];


Это работает, потому что все элементы std::vector хранятся последовательно
🔍 Что такое std::span?

std::span — это шаблонный класс-обертка, который предоставляет удобный интерфейс доступа к последовательности элементов, не владея ими. Он позволяет работать с частью или целым массивом, без копирования данных

🛠 Как это работает?

Просто создаём объект std::span, указав начальный указатель на массив и размер, либо контейнер, и получаем легкий доступ к элементам
🍔Что делают std::move и std::forward?

Если простыми словами, то std::move делает && (r-value), чтобы из всех перегрузок была выбрана именно перегрузка с &&

std::forward предназначен для шаблонов, чтобы && передалось в вызываемую из шаблона функцию без изменений. В итоге срабатывает move-семантика и убирается ненужное копирование данных при вызове
🍔 Что такое принцип разделения интерфейса?

Принцип разделения интерфейса (Interface segregation principle) — четвёртый принцип SOLID

Описание
- Множество интерфейсов к разным клиентам гораздо лучше, чем один большой, который покрывает требование всех клиентов
- Снижается связанность в коде и тем самым уменьшает сложность его поддержки
🍔 В чём заключается смысл принцип инверсии зависимостей?

Принцип инверсии зависимостей (Dependency inversion principle) — пятый принцип SOLID

❗️ Описание
- Лучше зависеть от абстракции, чем от конкретной имплементации
- В ООП лучше передавать интерфейс, чем его реализацию
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👩‍🚀 Откуда космический корабль в C++?

<=> — это оператор spaceship operator в C++. Он был введен в стандарте C++20 и предназначен для использования в контексте трехзначной операции сравнения

🔎 Этот оператор выполняет сравнение двух выражений и возвращает одно из трех значений:
• Отрицательное значение, если левый операнд меньше правого
• Ноль, если левый операнд равен правому
• Положительное значение, если левый операнд больше правого
🔮 Челлендж от анализатора PVS-Studio: насколько вы внимательны?

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

Челлендж состоит из 10 фрагментов кода, в которых есть ошибки. Все они взяты из известных Open Source проектов. Если вы успеваете найти ошибку за 60 секунд — вам начисляется один балл. Фрагменты кода короткие, поэтому 60 секунд — это честное ограничение

👉 Ссылка
🫣 Что за оператор --> ?

На самом деле это два отдельных оператора, -- и >, т.е. постфиксный декремент и оператор больше. Условие можно переписать как while( (x--) > 0 )
🧐 Для чего нужна функция WinMain?

Функция WinMain является точкой входа в графические приложения в операционной системе Windows. Главная отличительная особенность отличающая её от обычной main заключается в том, что для графического приложения не будет выведено никакой консоли
🦾🧠🏋️Качаем мозги к лету!

Курс «Алгоритмы и структуры данных» для тех, кто хочет научиться работать с алгоритмами, подготовиться к собеседованию крупную IT-компанию и начать брать более сложные проекты.

➡️ Алгоритмы и структуры данных 35 990 ₽ 21 594

⭐️ Переходите и активируйте бесплатные вводные занятия курсаhttps://proglib.io/w/da6727d1

Вас ждут:

– 150 практических заданий и 47 видеолекций

– бессрочный доступ к обучению

– поддержка преподавателя в чате

А также очень харизматичный спикер из Яндекса 🙌🏻
🍔 Как распечатать все установленные переменные в CMake?

При использовании CMake часто возникает ситуация, когда поведение может отличаться от ожидаемого. Например установленная не та версия компилятора, стандарт C++ отличается от ожидаемого, проектные зависимости появившиеся неизвестно от куда. Один из способов решения — поискать проблему в установленных внешних переменных, для этого можно написать свой макрос (пример на картинке выше)
🍔 Как установить точность вывода в консоль для конкретной переменной

Для этого можно использовать вы можете связать функцию std::setprecision с переменной, для которой хотите установить точность

std::setprecision — функция из библиотеки iomanip (STL), которая устанавливает точность для вывода чисел с плавающей точкой. В аргументе std::setprecision задаётся количество цифр, которые мы хотим вывести
😱 Почему префиксный инкремент быстрее чем постфиксный?

Для постфиксного итератора неявно выделяется дополнительная память для хранения промежуточной переменной
🍔 Как преобразовать std::string в const char* или char*?

Если мы хотим передать std::string в функцию, которой требуется const char*, можно использовать .c_str()

Для получения неконстантной строки char*, вызываем .data(). Появилось в C++17, до этого можно было использовать &str[0]

‼️ Указатель становится недействительным, если строка уничтожается
🍔 Библиотека std::stacktrace

В C++23 появилась библиотека std::stacktrace для получения текущего стека вызовов функций,
а именно последовательность вызовов от точки входа main()

С помощью библиотеки можно посмотреть описание функции description() , исходный файл в котором находится функция source file() и номер строки source line()
🍔 Зачем нужен std::format?

❗️ В функция printf нет автоматического выведения типов, она подвержена ошибкам и не расширяема

❗️Потоковые объекты (stream) очень многословны и трудно оптимизируются

‼️ В C++20 появился std::format позволяющий форматировать строки в python стиле

🍔 Особенности std::format
• Безопасный для использования с разными типами (Type-safe)
• Поддерживает позиционные аргументы
• Расширяемость (поддержка пользовательских типов)
• Возвращает std::string