std::this_thread::yield
— это функция, которая позволяет текущему потоку уступить оставшееся время процессора другим потокам. Она используется для улучшения эффективности многопоточных программ, особенно в активном ожидании.
while (!ready) {
std::this_thread::yield(); // Уступить время другим потокам
}
Функция не блокирует поток, а лишь сигнализирует планировщику, что текущий поток может приостановиться. Это полезно в сценариях, где поток ожидает выполнения условия, но не должен занимать ресурсы процессора впустую.
Использование
yield
помогает снизить нагрузку на CPU в активных циклах ожидания, но не гарантирует немедленное переключение на другой поток.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Для создания объекта класса используется синтаксис, аналогичный объявлению переменной. Если класс имеет конструктор по умолчанию, объект можно создать без передачи аргументов. Если конструктор требует параметров, они передаются при создании объекта.
Если конструктор по умолчанию отсутствует, его необходимо явно определить или использовать другой доступный конструктор. Для динамического создания объекта используется ключевое слово
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ С++ собеседования
class MyClass {
public:
MyClass(int value) {
// Конструктор с параметром
}
};
int main() {
MyClass obj1(42); // Создание объекта с передачей аргумента в конструктор
MyClass obj2; // Ошибка: если нет конструктора по умолчанию
return 0;
}
Если конструктор по умолчанию отсутствует, его необходимо явно определить или использовать другой доступный конструктор. Для динамического создания объекта используется ключевое слово
new
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Одиночное наследование позволяет классу наследовать свойства и методы только от одного базового класса. Это упрощает иерархию и уменьшает вероятность конфликтов.
Множественное наследование позволяет классу наследовать от нескольких базовых классов. Это может быть полезно для комбинирования функциональности, но увеличивает сложность из-за возможных конфликтов имен или "алмаза смерти" (diamond problem).
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ С++ собеседования
class Base {
public:
void display() {
// Метод базового класса
}
};
class Derived : public Base {
// Класс наследует только от Base
};
Множественное наследование позволяет классу наследовать от нескольких базовых классов. Это может быть полезно для комбинирования функциональности, но увеличивает сложность из-за возможных конфликтов имен или "алмаза смерти" (diamond problem).
class Base1 {
public:
void show() {
// Метод первого базового класса
}
};
class Base2 {
public:
void print() {
// Метод второго базового класса
}
};
class Derived : public Base1, public Base2 {
// Класс наследует от Base1 и Base2
};
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
std::array
— это контейнер STL, предоставляющий статический массив фиксированного размера с дополнительными методами для удобства работы. Для использования необходимо подключить заголовочный файл <array>
.
#include <array>
#include <iostream>
int main() {
std::array<int, 5> arr = {1, 2, 3, 4, 5}; // Создание массива на 5 элементов
arr[0] = 10; // Доступ к элементам по индексу
std::cout << "First element: " << arr.front() << "\n"; // Первый элемент
std::cout << "Last element: " << arr.back() << "\n"; // Последний элемент
std::cout << "Size: " << arr.size() << "\n"; // Размер массива
for (int i : arr) {
std::cout << i << " "; // Итерация по массиву
}
return 0;
}
std::array
сочетает в себе безопасность и удобство STL с производительностью обычных массивов.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
nullptr
, изменяемым и перенаправляемым на другой объект.
int x = 10;
int* ptr = &x; // ptr хранит адрес x
*ptr = 20; // изменение значения через указатель
Ссылка — это псевдоним для существующего объекта. Не может быть
null
, должна быть инициализирована при объявлении и не может быть перенаправлена.
int y = 30;
int& ref = y; // ref — псевдоним y
ref = 40; // изменение значения через ссылку
Указатели поддерживают арифметику, ссылки — нет. Ссылки безопаснее, но менее гибкие.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤩1
std::is_polymorphic
— это шаблонный класс из <type_traits>
, который проверяет, является ли тип полиморфным. Полиморфный тип содержит хотя бы одну виртуальную функцию или наследуется от полиморфного класса. Возвращает
std::true_type
или std::false_type
в зависимости от результата проверки. Может использоваться для условной компиляции или статических проверок.
struct A { virtual void foo() {} };
struct B : A {};
struct C {};
static_assert(std::is_polymorphic<A>::value); // true
static_assert(std::is_polymorphic<B>::value); // true
static_assert(!std::is_polymorphic<C>::value); // false
Полезен для шаблонного метапрограммирования, когда требуется обрабатывать полиморфные и не полиморфные типы по-разному.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
std::make_unique
— удобная функция для создания std::unique_ptr
, обеспечивающая безопасность при исключениях и избегающая явного new
. Принимает аргументы конструктора объекта и возвращает
std::unique_ptr
.
struct Widget {
Widget(int x, int y) {}
};
// Создание unique_ptr с make_unique
auto ptr = std::make_unique<Widget>(10, 20);
Для массивов используетя перегрузка с
[]
:
auto arr = std::make_unique<int[]>(5); // Создает массив из 5 int
Предпочтительнее
new
+ unique_ptr
, так как исключает утечки при выбросе исключений.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7