int x = 10;
decltype(x) y = 20; // Тип y будет int, так как тип x — int
decltype
также учитывает категорию значения (lvalue, rvalue), что делает его полезным для точного определения типов в сложных сценариях. Например, при работе с возвращаемыми значениями функций или выражениями.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
1. Единообразие интерфейса: Использование стандартных HTTP-методов (GET, POST, PUT, DELETE) для выполнения операций.
2. Отсутствие состояния: Каждый запрос содержит всю информацию, необходимую для его обработки.
3. Кэширование: Ответы могут быть кэшируемыми для повышения производительности.
4. Клиент-серверная архитектура: Четкое разделение между клиентом и сервером.
5. Слоистая система: Возможность использования промежуточных слоев (прокси, шлюзы) без изменения интерфейса.
// Пример HTTP-запроса GET для получения данных
GET /api/resource/123 HTTP/1.1
Host: example.com
RESTful API широко используется благодаря своей простоте, масштабируемости и удобству интеграции.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
Деструктор имеет имя, совпадающее с именем класса, но с тильдой (~) в начале. У него нет возвращаемого типа и параметров. Пример:
class MyClass {
public:
~MyClass() {
// Освобождение ресурсов
}
};
Деструктор вызывается в следующих случаях:
1. При выходе объекта из области видимости.
2. При явном вызове
delete
для объекта, созданного через new
.3. При завершении программы, если объект был создан в глобальной области видимости.
Деструкторы особенно важны для классов, управляющих ресурсами, чтобы избежать утечек памяти и других проблем.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
std::lock_guard
. Он позволяет захватывать и освобождать мьютекс вручную, поддерживает отложенную блокировку, а также может быть перемещён или передан в другие функции.#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
void task() {
std::unique_lock<std::mutex> lock(mtx, std::defer_lock); // Отложенная блокировка
lock.lock(); // Захват мьютекса
std::cout << "Critical section\n";
lock.unlock(); // Освобождение мьютекса
}
std::unique_lock
полезен в сценариях, где требуется более тонкий контроль над блокировками, например, при использовании условных переменных.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍5
nullptr
— это ключевое слово, представляющее нулевой указатель. Оно было введено в C++11 для замены макроса NULL
и литерала 0
, которые использовались ранее.
int* ptr = nullptr;
nullptr
имеет тип std::nullptr_t
, что позволяет избежать неоднозначностей при перегрузке функций.
void func(int);
void func(int*);
func(nullptr); // Вызовется void func(int*)
Использование
nullptr
повышает безопасность и читаемость кода, так как явно указывает на нулевой указатель.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1👀1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
std::async
и std::thread
заключается в уровне абстракции и управлении выполнением задач. std::thread
создает отдельный поток, который требует явного управления (например, вызов join()
или `detach()`). Поток начинает выполнение сразу после создания.
std::thread t([](){ /* код для выполнения */ });
t.join(); // Ожидание завершения потока
std::async
абстрагирует создание потока и возвращает std::future
, который может быть использован для получения результата асинхронной операции. По умолчанию, задача может быть выполнена в отдельном потоке или отложена, в зависимости от политики запуска.
auto future = std::async([](){ return 42; });
int result = future.get(); // Получение результата
std::async
удобен для задач с возвращаемым значением, а std::thread
— для полного контроля над потоками.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
sort
в STL (Standard Template Library) сортирует элементы в диапазоне, заданном итераторами. По умолчанию используется оператор <
, но можно передать пользовательский компаратор для определения порядка сортировки.
#include <algorithm>
#include <vector>
std::vector<int> vec = {4, 2, 5, 1, 3};
std::sort(vec.begin(), vec.end()); // Сортировка по возрастанию
Для сортировки по убыванию можно использовать
std::greater
:
std::sort(vec.begin(), vec.end(), std::greater<int>());
Функция
sort
работает за время O(N log N) и использует гибридный алгоритм (обычно Introsort), сочетающий QuickSort, HeapSort и InsertionSort. Это делает её эффективной для большинства случаев.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
class Base {
public:
virtual void show() {
// базовая реализация
}
};
class Derived : public Base {
public:
void show() override {
// переопределенная реализация
}
};
Base* obj = new Derived();
obj->show(); // вызовется метод Derived::show()
- Статический полиморфизм: выбор метода определяется на этапе компиляции.
- Динамический полиморфизм: выбор метода определяется во время выполнения на основе типа объекта.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3🤔1
const
указывает, что значение переменной не может быть изменено после инициализации. Это помогает предотвратить случайные изменения данных и повышает читаемость кода.
const int maxValue = 100;
maxValue = 200; // Ошибка: попытка изменить константу
const
также может применяться к указателям, функциям и методам. Например, метод класса, объявленный как const
, гарантирует, что он не изменяет состояние объекта.
class MyClass {
public:
void myMethod() const {
// Этот метод не может изменять поля класса
}
};
Использование
const
улучшает безопасность кода и помогает компилятору оптимизировать выполнение программы.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
<type_traits>
, которая проверяет, являются ли два типа одинаковыми. Возвращает std::true_type
, если типы идентичны, и std::false_type
в противном случае.
#include <type_traits>
bool result1 = std::is_same<int, int>::value; // true
bool result2 = std::is_same<int, double>::value; // false
std::is_same
часто используется в шаблонном программировании для проверки типов на этапе компиляции. Это позволяет создавать специализированные реализации функций или классов в зависимости от типов.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
NULL
и nullptr
заключается в их типизации и использовании. - NULL
- Это макрос, который обычно определяется как
0
или ((void*)0)
. - Может вызывать неоднозначности при перегрузке функций, так как компилятор интерпретирует его как целое число (int).
- nullptr
- Это ключевое слово, введенное в стандарте C++11.
- Имеет тип
std::nullptr_t
, что позволяет избежать неоднозначностей при перегрузке функций и обеспечивает безопасность типов. Пример:
void func(int);
void func(char*);
func(NULL); // Вызовется func(int), что может быть неочевидно
func(nullptr); // Однозначно вызовется func(char*)
Использование
nullptr
предпочтительно в современном C++ для указания нулевого указателя.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
Основные компоненты STL:
- Контейнеры: vector, list, map, set и другие структуры для хранения данных.
- Алгоритмы: sort, find, copy и другие операции над данными.
- Итераторы: обеспечивают доступ к элементам контейнеров.
Пример:
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {5, 3, 1, 4, 2};
std::sort(vec.begin(), vec.end()); // Сортировка вектора
return 0;
}
STL позволяет писать эффективный и читаемый код, минимизируя ручное управление памятью и дублирование кода.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5