Вот некоторые из обсуждаемых тем:
• Множественное и виртуальное наследование
• Идентификация типов во время выполнения
• Определение шаблона функции
• Абстрактные контейнерные типы
• Перегрузка операторов
• Область видимости и время жизни
• Инициализация, присваивание и уничтожение класса
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Первый:
int* f() {
int b = 10;
return &b;
}
Второй:
int* f() {
int b = 10;
int* a = &b;
return a;
}
Почему 1 вариант не компилируется? Компилятор, очевидно, видит, что вы возвращаете указатель на локальную переменную, и выдаёт ошибку (или, скорее всего, предупреждение).
Почему же тогда 2 вариант компилируется? Дело в том, что компилятор не обязан ловить нас за руку каждый раз, когда мы совершаем ошибку. Он не будет рассматривать то, откуда пришли значения во всех переменных, которые мы возвращаем.
Если в 1 случае компилятор нам помог (потому что это было легко), то во 2 он просто решил этого не делать (потому что ему пришлось бы анализировать, откуда пришло значение переменной
a
). Почему 2 вариант работает? А случайно. Значит в стеке случайно ничего не затёрло переменную, расположенную в ничьей памяти. Вот эту самую ничью память случайно никто не забрал. А мог забрать в любой момент. Лучше так не делать, поскольку в этом случае никаких гарантий нормальной работы программы нет.
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Подборка лучших обучающих каналов для программистов.
➡️ Делитесь с коллегами и сохраняйте себе, чтобы не потерять
⚡Машинное обучение
Machine Learning - запускаем лучшие ИИ модели, пишем код, погружаемся в нейросети
Ml Собеседование - подготовка к собесу по мл, алгоритмам, коду
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат
🏆 Golang
Golang - изучи один из самых перспективных языков на ит-рынке
Golang собеседование - разбор задач и вопросов с собесов
Golang вакансии -работа для Go разработчика
Golang книги библиотека книг
Golang задачи и тесты
Golang чат
Golang news - новости из мира go
Golang дайджест
💥 Linux /Этичный хакинг
Linux Academy - гайды, секреты и лучшие материалы по Linux
Kali linux - погрузись в мир этичного хакинга и кибербезопасности
linux_kal - kali чат
Информационная безопасность
🚀 Data Science
Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data
🛢Базы данных
Sql базы данных - научим работе с базами данных профессионально
Библиотека баз данных
SQL чат
Вакансии Sql аналитик данных
#️⃣C#
С# академия - лучший канал по c#
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа
🐍 Python
Python/django - самый крупный обучающий канал по Python
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги
☕ Java
Java академия - java от Senior разработчика
Java вакансии
Java чат
Java вопросы с собеседований
Java книги
💻 C++
C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии
⚡️ Frontend
Javascript академия - крупнейший js канал
React - лучшие гайды и советы по работе с react
Frontend - тутрориалы, уроки, гайды, код
PHP
Книги frontend
Задачи frontend
🦀 Rust
Rust программирование
Rust чат
Rust книги для программистов
📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки
🇬🇧 Английский для программистов
🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ
Artificial Intelligence
🔥 DevOPs
Devops для программистов
Книги Devops
🌟 Docker/Kubernets
Docker
Kubernets
📓 Книги
Библиотеки Книг для программситов
💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Папка Java разработчика
Папка C#
Папка Frontend
➡️ Делитесь с коллегами и сохраняйте себе, чтобы не потерять
⚡Машинное обучение
Machine Learning - запускаем лучшие ИИ модели, пишем код, погружаемся в нейросети
Ml Собеседование - подготовка к собесу по мл, алгоритмам, коду
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат
🏆 Golang
Golang - изучи один из самых перспективных языков на ит-рынке
Golang собеседование - разбор задач и вопросов с собесов
Golang вакансии -работа для Go разработчика
Golang книги библиотека книг
Golang задачи и тесты
Golang чат
Golang news - новости из мира go
Golang дайджест
💥 Linux /Этичный хакинг
Linux Academy - гайды, секреты и лучшие материалы по Linux
Kali linux - погрузись в мир этичного хакинга и кибербезопасности
linux_kal - kali чат
Информационная безопасность
🚀 Data Science
Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data
🛢Базы данных
Sql базы данных - научим работе с базами данных профессионально
Библиотека баз данных
SQL чат
Вакансии Sql аналитик данных
#️⃣C#
С# академия - лучший канал по c#
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа
🐍 Python
Python/django - самый крупный обучающий канал по Python
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги
☕ Java
Java академия - java от Senior разработчика
Java вакансии
Java чат
Java вопросы с собеседований
Java книги
💻 C++
C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии
⚡️ Frontend
Javascript академия - крупнейший js канал
React - лучшие гайды и советы по работе с react
Frontend - тутрориалы, уроки, гайды, код
PHP
Книги frontend
Задачи frontend
🦀 Rust
Rust программирование
Rust чат
Rust книги для программистов
📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки
🇬🇧 Английский для программистов
🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ
Artificial Intelligence
🔥 DevOPs
Devops для программистов
Книги Devops
🌟 Docker/Kubernets
Docker
Kubernets
📓 Книги
Библиотеки Книг для программситов
💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Папка Java разработчика
Папка C#
Папка Frontend
std::string
является std::string::npos
. Давайте освежим, что это за константа и как её можно использовать.std::string::npos
— это статическая константа класса std::string
, представляющая максимально возможное значение для типа size_t
. Эта константа часто используется для индикации отсутствия позиции символа или подстроки в строке.Сама же константа объявлена как
-1
. Как же тогда она хранит максимально возможное значение size_t
? Дело в том, что size_t
не может хранить отрицательные числа. Поэтому значение -1
переходит как бы “по кругу” и становится самым большим числом, которое size_t
может хранить. Поэтому мы можем использовать -1
вместо string::npos
при работе со стандартными методами класса string
в C++.find
объекта std::string
возвращает позицию первого вхождения подстроки или символа в строке. Если подстрока или символ не найдены, метод возвращает std::string::npos
.std::string str = "Привет, мир!";
size_t pos = str.find("мир");
if (pos != std::string::npos) {
std::cout << "Подстрока найдена на позиции: " << pos << std::endl;
} else {
std::cout << "Подстрока не найдена." << std::endl;
}
// Подстрока найдена на позиции: 14
erase
объекта std::string
позволяет удалять подстроку из строки. Если вам нужно удалить все символы начиная с определенной позиции до конца строки, вы можете использовать std::string::npos
в качестве второго аргумента:std::string str = "Привет, мир!";
str.erase(12, std::string::npos);
std::cout << str << std::endl; // Вывод: "Привет"
// Привет
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Держите неплохой инструмент, позволяющий преобразовать плюсовый код в Java или Python.
Разумеется, всё работает за счёт AI
Тестите, пишите, как оно)
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Вообще, это совершенно разные, хоть и взаимосвязанные, вещи.
New-expression - это встроенная конструкция языка, при помощи которой в языке С++ создаются объекты в динамической памяти. Например
int *p1 = new int();
SomeClass *p2 = new SomeClass[20];
А
operator new
(и operator new[]
) - это функции выделения "сырой" неинициализированной памяти, которые неявно вызываются изнутри new-expression. В упрощенной форме алгоритм работы new-expression состоит из двух этапов:operator new
/operator new[]
operator new
"сырую" память - например, путем вызова конструктора(-ов) создаваемого объекта(-ов).Стандартная библиотека предоставляет некую "базовую" реализацию функций
operator new
. Эти функции, при необходимости, также являются замещаемыми/перегружаемыми пользователем, в том числе индивидуально для каждого пользовательского класса.@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
int main(){[](){}();}
А означает он следующее:
int main() // Функция main без аргументов.
{
[] // Объявление лямбда-функции без списка захвата...
() // ... с пустым списком аргументов ...
{} // ... и пустым телом, ...
(); // ... которая тут же вызывается.
}
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Эффективное использование С++
1. Библиотеки, утилиты, средства разработки, сборка (Эффективное использование С++)
2. Работа с памятью. Утечки ресурсов. RAII, умные указатели (Эффективное использование С++)
3. Move semantics, rvalue reference, perfect forwarding.
4. Callbacks: lambda, bind & function.
5. Multithreading in C++ (потоки, блокировки, задачи, атомарные операции, очереди сообщений)
6. Обзор возможностей современных стандартов C++
#video #cpp
https://www.youtube.com/watch?v=oPXn_n-lrzw&list=PLntPXGBtcaSj11jJWYiwCM2QyDG22SgXr
1. Библиотеки, утилиты, средства разработки, сборка (Эффективное использование С++)
2. Работа с памятью. Утечки ресурсов. RAII, умные указатели (Эффективное использование С++)
3. Move semantics, rvalue reference, perfect forwarding.
4. Callbacks: lambda, bind & function.
5. Multithreading in C++ (потоки, блокировки, задачи, атомарные операции, очереди сообщений)
6. Обзор возможностей современных стандартов C++
#video #cpp
https://www.youtube.com/watch?v=oPXn_n-lrzw&list=PLntPXGBtcaSj11jJWYiwCM2QyDG22SgXr
— запрет возврата из функции ссылок на временное значение,
—
[[indeterminate]]
и уменьшение количества Undefined Behavior,— диагностика при
=delete;
,— арифметика насыщения,
— линейная алгебра (да-да! BLAS и немного LAPACK),
— индексирование variadic-параметров и шаблонов
...[42]
,— вменяемый
assert(...)
,— и другие приятные мелочи.
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Держите реализацию на C++ таких шаблонов как:
• фабрика
• строитель
• абстрактная фабрика
• одиночка
• прототип
А вот немного о самих паттернах:
— разделяет создание сложного объекта и инициализацию его состояния так, что одинаковый процесс построения может создать объекты с разным состоянием.
— гарантирует, что класс имеет только 1 экземпляр и предоставляет глобальную точку доступа к нему.
— определяет несколько видов объектов, чтобы при создании использовать объект-прототип и создаёт новые объекты, копируя прототип.
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Держите полезную статью, здесь мы рассматриваем две техники перехвата данных на уровне ОС. Они позволяют получить точную информацию о состоянии игровых объектов.
В то же время эти техники имеют несколько преимуществ над чтением данных из памяти процесса игры:
Эти техники перехвата WinAPI-вызовов можно использовать не только в алгоритме какого-нибудь бота, но и для исследования памяти процесса игрового приложения. Да и вообще, применений масса)
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
https://github.com/16bit-ykiko/vscode-compiler-explorer
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
=default
(для конструктора по умолчанию)X::X() {}
// и
X::X() = default;
#include <iostream>
#include <type_traits>
struct X {
//X() {}
X() = default;
int a;
int b;
};
int main( ) {
X x { 1, 2 }; // ошибка, если X - не тривиальный класс.
std::cout << std::boolalpha <<
std::is_trivial<X>::value << "\n";
}
При определении конструктора как
= default
тривиальность класса сохраняется, если она была до этого. В данном случае, это равносильно отсутствию явного упоминания конструктора в определении класса.Если конструктор по умолчанию определен как
= default
вне определения класса, всё равно будет считаться, что конструктор предоставлен пользователем, и это тоже делает класс нетривиальным.@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM