Senior C++ Developer – Telegram
Senior C++ Developer
12.3K subscribers
1.36K photos
3 videos
610 links
Изучаем C++.

По вопросам сотрудничества: @adv_and_pr

РКН: https://www.gosuslugi.ru/snet/676e9a1e4e740947beca35ba
Download Telegram
Что выведет код?
Anonymous Quiz
8%
11
6%
00
47%
22
13%
12
5%
02
23%
Другое
Компилятор C++ может динамически встраивать функции во время выполнения.

https://github.com/drti
Minetest — это воксельный игровой движок с открытым исходным кодом, который легко модифицировать и создавать игры.

https://www.libhunt.com/r/minetest
Что выведет код?
Anonymous Quiz
34%
210
2%
120
5%
021
35%
012
2%
201
22%
Другое
#вопросы_с_собеседований по Си
Что такое void указатель? Можно ли разыменовать указатель void, не зная его типа?

void указатель — это указатель, который можно использовать для указания на любые данные любого произвольного типа. Указатель void может быть разыменован только после явного приведения. Например:
int a = 5;
void *b = &a;
printf(“%d\n”, *((int*)b));
Что выведет код?
Anonymous Quiz
10%
12
64%
13
10%
31
6%
50
10%
11
Генерация исходного кода C++ (ориентация на данные финансового рынка).

https://lucisqr.substack.com/p/source-code-generation
#вопросы_с_собеседований
Есть ли разница между классом и структурой?

Единственная разница между классом и структурой — это модификаторы доступа. Члены структуры по умолчанию public; члены класса являются приватными. Рекомендуется использовать классы, когда вам нужен объект с методами, и структуры, когда у вас есть простой объект данных.
#вопросы_с_собеседований
Когда следует использовать виртуальное наследование?

Хотя идеально вообще избегать виртуального наследования (вы должны знать, как будет использоваться ваш класс), все же важно иметь четкое представление о том, как работает виртуальное наследование:

Итак, когда у вас есть класс (класс A), который наследуется от двух родителей (B и C), оба из которых имеют общего родителя (класс D), как показано на картинке. Если вы не используете виртуальное наследование в этом случае, вы получите две копии D в классе A: одну из B и одну из C. Чтобы это исправить, вам нужно изменить объявления классов C и B на виртуальные:
class C:  virtual public D {
};

class B: virtual public D {
};
#вопросы_с_собеседований
Предполагая, что buf является валидным указателем, в чем проблема в приведенном на картинке коде? Каким был бы альтернативный способ реализации этого, который позволил бы избежать этой проблемы?

Проблема в коде заключается в том, что --sz >= 0 всегда будет истинным, поэтому вы никогда не выйдете из цикла while (поэтому вы, вероятно, в конечном итоге испортите память или вызовете какое-то нарушение памяти или какой-либо другой программный сбой, в зависимости от того, что вы делаете внутри цикла). Причина, по которой --sz >= 0 всегда будет истинной, заключается в том, что тип sz равен size_t. size_t на самом деле просто псевдоним одного из основных беззнаковых целочисленных типов. Следовательно, поскольку sz не имеет знака, оно никогда не может быть меньше нуля (поэтому условие никогда не может быть ложным). Одним из примеров альтернативной реализации, позволяющей избежать этой проблемы, может быть использование цикла for следующим образом:
for (size_t i = 0; i < sz; i++)
#вопросы_с_собеседований
Объясните ключевые слова mutable и volatile.

Ключевое слово volatile сообщает компилятору, что переменная может измениться без ведома компилятора. Переменные, объявленные как volatile, не будут кэшироваться компилятором и, таким образом, всегда будут считываться из памяти.

Ключевое слово mutable можно использовать для переменных-членов класса. Изменяемые переменные могут меняться из константных функций-членов класса.
Как следует обрабатывать ошибки во время выполнения в C++?

- Ошибки выполнения в C++ можно обрабатывать с помощью исключений.
- Этот механизм обработки исключений в C++ разработан для обработки ошибок в программном обеспечении, состоящем из независимо разработанных компонентов, работающих в одном процессе и находящихся под синхронным управлением.
- Согласно C++, любая подпрограмма, которая не выполняет своего обещания, генерирует исключение. Вызывающий код, который знает, как обрабатывать эти исключения, может их перехватить.
Как можно вызвать функцию C в программе на C++?

С использованием объявления extern "C".