C++ Academy
10.2K subscribers
183 photos
64 videos
228 links
По всем вопросам- @haarrp
Download Telegram
🖥 Ежегодная программа Google Summer of Code 2024

Organic Maps призывает всех желающих принять участие в ежегодной программе Google Summer of Code 2024 (GSoC), в рамках которой контрибьюторы со всего мира участвуют в разработке программного обеспечения с открытым исходным кодом под руководством опытных наставников из различных организаций.

Участвуйте в GSoC, пробуйте свои силы)

🖥 Organic Maps, Github 8K⭐️
(большая часть проекта на C++, 76.1%)

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Неплохой вебинар про атомарные типы данных и Memory Ordering в C++

Обсуждаются типы данных в C++, для которых не нужна дополнительная синхронизация при конкуретном доступе.
Параллельно спикер рассказывает, как С++ помогает тонко оптимизировать lock-free разработку с помощью memory ordering.
Рекомендую, затрагивается много полезных для понимания вещей

📎 Кликабельный план вебинара
📎 YouTube

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 C++ Insights – Посмотрите на свой исходный код глазами компилятора

Цель C++ Insights - сделать видимыми вещи, которые обычно происходят за кулисами. Речь идет о волшебстве, которое компилятор совершает для нас, чтобы заставить все работать.

Github

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Релиз среды разработки Qt Creator 13

3 апреля 2024 года состоялся релиз открытой среды разработки Qt Creator 13. Это событие произошло после недавнего выпуска фреймворка Qt 6.7 и спустя пять месяцев после выхода Qt Creator 12.

Qt Creator (ранее известная под кодовым названием Greenhouse) — свободная IDE для разработки на С, C++, JavaScript и QML. Разработана Trolltech (Digia) для работы с фреймворком Qt. Включает в себя графический интерфейс отладчика и визуальные средства разработки интерфейса как с использованием QtWidgets, так и QML. Поддерживаемые компиляторы: GCC, Clang, MinGW, MSVC, Linux ICC, GCCE, RVCT, WINSCW.

В состав Qt Creator входит передовой инструмент Qt Designer, позволяющий создавать внешний вид окна приложения, добавляя и перетаскивая элементы по аналогии Windows Forms в Visual Studio. В качестве систем сборки используются qmake, cmake и autotools.

📎 Подробнее

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Отличный онлайн-учебник по C++

Держите годный онлайн-учебник по C++, здесь обсуждаются самые нужные темы, много кода с детальным объяснением, много практических заданий

Вот некоторые из обсуждаемых тем:
• Множественное и виртуальное наследование
• Идентификация типов во время выполнения
• Определение шаблона функции
• Абстрактные контейнерные типы
• Перегрузка операторов
• Область видимости и время жизни
• Инициализация, присваивание и уничтожение класса

📎 Учебник

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Возврат указателя на локальную переменную C++

▶️Есть два варианта функции. Почему не работает первый - понятно, но почему тогда срабатывает второй вариант?

Первый:
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
🖥 string::npos в C++: разбираемся с примерами

Стандартная библиотека языка C++ предоставляет ряд удобных инструментов для работы со строками. Одной из важных констант при работе с объектами 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++.

Как использовать npos с методом find? Метод 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


Как использовать npos с методом erase? Метод 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
🖥 Онлайн-конвертер фрагментов кода C++

Держите неплохой инструмент, позволяющий преобразовать плюсовый код в Java или Python.
Разумеется, всё работает за счёт AI
Тестите, пишите, как оно)

📎 Конвертер

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 В чем разница между operator new и expression new?

Вообще, это совершенно разные, хоть и взаимосвязанные, вещи.
New-expression - это встроенная конструкция языка, при помощи которой в языке С++ создаются объекты в динамической памяти. Например
int *p1 = new int();
SomeClass *p2 = new SomeClass[20];


А operator newoperator new[]) - это функции выделения "сырой" неинициализированной памяти, которые неявно вызываются изнутри new-expression. В упрощенной форме алгоритм работы new-expression состоит из двух этапов:

🟡1. Вызвать функцию выделения "сырой" памяти operator new/operator new[]

🟡2. Проинициализировать (если необходимо) полученную от operator new "сырую" память - например, путем вызова конструктора(-ов) создаваемого объекта(-ов).

Стандартная библиотека предоставляет некую "базовую" реализацию функций operator new. Эти функции, при необходимости, также являются замещаемыми/перегружаемыми пользователем, в том числе индивидуально для каждого пользовательского класса.

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Что делает код int main(){[](){}();}

▶️Забавный вопрос с собеседования: что делает данный код?
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
🖥 C++26 — прогресс и новинки от ISO C++

Работа в комитете по стандартизации языка C++ активно кипит. Недавно состоялось очередное заседание. Как один из участников, поделюсь сегодня с Хабром свежими новостями и описанием изменений, которые планируются в С++26.

До нового стандарта C++ остаётся чуть больше года, и вот некоторые новинки, которые попали в черновик стандарта за последние две встречи:
— запрет возврата из функции ссылок на временное значение,
[[indeterminate]] и уменьшение количества Undefined Behavior,
— диагностика при =delete;,
— арифметика насыщения,
— линейная алгебра (да-да! BLAS и немного LAPACK),
— индексирование variadic-параметров и шаблонов ...[42],
— вменяемый assert(...),
— и другие приятные мелочи.

Помимо этого, вас ждут планы и прогресс комитета по большим фичам и многое другое.

📎 Читать подробнее

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM