🧠 Вопрос из реального интервью для понимания отличий языка C++ от C (junior):
👉 Чем отличается
Ответ тезисно:
2️⃣
3️⃣
4️⃣
5️⃣
#cpp_question #cpp_tips
👉 Чем отличается
new от malloc?Ответ тезисно:
1️⃣ new/delete используется в C++, а malloc/free — в C2️⃣
new вызывает конструктор, malloc — нет. 3️⃣
new возвращает указатель конкретного типа, malloc — void*. 4️⃣
new выбрасывает исключение std::bad_alloc, malloc — возвращает nullptr. 5️⃣
delete вызывает деструктор, free — просто освобождает память.#cpp_question #cpp_tips
✅ Ответ к задаче из предыдущего поста:
lvalue rvalue
❗️Пояснения:
a — именованная переменная → lvalue
10 — временное значение → rvalue
🧠 На интервью часто спрашивают:
Ответ:
lvalue имеет адрес и может стоять слева от =, rvalue — временное значение, которое можно только читать.
#cpp_question #cpp_challenge
❗️Пояснения:
a — именованная переменная → lvalue
10 — временное значение → rvalue
🧠 На интервью часто спрашивают:
Что такое lvalue и rvalue?
Ответ:
lvalue имеет адрес и может стоять слева от =, rvalue — временное значение, которое можно только читать.
#cpp_question #cpp_challenge
⚙️Простой алгоритм для реализации на собеседовании (junior)
🔎 Бинарный поиск
Сложность: O(log n)
❗️Вопрос на собеседовании:
Ответ: поведение непредсказуемо — алгоритм применим только к отсортированным массивам.
#cpp_algo #cpp_question
🔎 Бинарный поиск
Сложность: O(log n)
❗️Вопрос на собеседовании:
Что будет, если массив не отсортирован?
Ответ: поведение непредсказуемо — алгоритм применим только к отсортированным массивам.
#cpp_algo #cpp_question
💬 Простой вопрос про ООП (Объектно-Ориентированное Программирование) (junior)
Пример виртуального деструктора:
✅ Ответ: Если в базовом классе нет виртуального деструктора, при удалении через Base* вызывается только базовый деструктор, а деструктор наследника — нет → утечка памяти!
#cpp_question
Зачем нужен виртуальный деструктор?
Пример виртуального деструктора:
struct Base
{
virtual ~Base() = default;
};
✅ Ответ: Если в базовом классе нет виртуального деструктора, при удалении через Base* вызывается только базовый деструктор, а деструктор наследника — нет → утечка памяти!
#cpp_question
🧠 Частый вопрос на знание ключевых слов языка
Что делает ключевое слово explicit? (junior)
📘 Ответ: explicit запрещает неявные преобразования.
Используй его, чтобы избежать случайного вызова конструктора при присваивании.
#cpp_question #cpp_tips
Что делает ключевое слово explicit? (junior)
struct Client {
explicit Client(int x) {}
};
Client a = 5; // ❌ ошибка
Client b(5); // ✅ ок📘 Ответ: explicit запрещает неявные преобразования.
Используй его, чтобы избежать случайного вызова конструктора при присваивании.
#cpp_question #cpp_tips
📦 Рассмотрим важный концепт языка C++. Move semantics.
💭Основная идея:
Современный C++ , начиная с C++11, позволяет не копировать объекты,
а просто передавать владение ресурсом. Это и есть move semantics.
📋 Копирование → создаёт новую строку, копирует все символы.
🚚 Перемещение → "забирает" указатель у a, а a становится пустой.
⚠️ std::move — это не move, это cast
🧠 std::move не перемещает ничего сам по себе!
Он лишь превращает объект в rvalue-ссылку,
давая компилятору понять:
❗️Важное правило: после std::move — не трогай объект
❓ Когда использовать std::move
✅ Возврат временного объекта из функции:
✅ При передаче в контейнер:
🚫 Не используем при передаче по const& — const запрещает move!
🎯 Что мы имеет в итоге:
1️⃣ std::move — это rvalue cast, не “перемещение”.
2️⃣ Move-конструктор переносит ресурсы, оставляя источник “пустым”.
3️⃣ После move объект можно уничтожать, но не использовать.
4️⃣ const запрещает move.
Пользуйтесь, друзья, и делитесь со своими товарищами программистами🤝
#cpp_tips #cpp_question
💭Основная идея:
Копировать дорого. Перемещать — почти бесплатно
Современный C++ , начиная с C++11, позволяет не копировать объекты,
а просто передавать владение ресурсом. Это и есть move semantics.
std::string a = "Hello";
std::string b = a; // копирование
std::string c = std::move(a); // перемещение
📋 Копирование → создаёт новую строку, копирует все символы.
🚚 Перемещение → "забирает" указатель у a, а a становится пустой.
⚠️ std::move — это не move, это cast
🧠 std::move не перемещает ничего сам по себе!
Он лишь превращает объект в rvalue-ссылку,
давая компилятору понять:
Я больше не буду использовать этот объект — можешь забирать ресурсы.
❗️Важное правило: после std::move — не трогай объект
std::string s = "Hello";
auto t = std::move(s);
std::cout << s; // ❌
❓ Когда использовать std::move
✅ Возврат временного объекта из функции:
std::string make() {
std::string s = "Data";
return s; // RVO или move
}✅ При передаче в контейнер:
vec.push_back(std::move(obj));
🚫 Не используем при передаче по const& — const запрещает move!
void f(const std::string& s) {
auto t = std::move(s); // ❌ всё равно копия
}🎯 Что мы имеет в итоге:
1️⃣ std::move — это rvalue cast, не “перемещение”.
2️⃣ Move-конструктор переносит ресурсы, оставляя источник “пустым”.
3️⃣ После move объект можно уничтожать, но не использовать.
4️⃣ const запрещает move.
Пользуйтесь, друзья, и делитесь со своими товарищами программистами
#cpp_tips #cpp_question
Please open Telegram to view this post
VIEW IN TELEGRAM