Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Захватывающая аркада-лабиринт по мотивам культовой игры восьмидесятых. Управляйте желтым человечком, ешьте кексы и постарайтесь не попадаться на глаза призракам.

Пикман

Аркады, На ловкость, 2D

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

C++ + Программирование

С этим тегом используют

IT IT юмор Программист Python Помощь Разработка Картинка с текстом Юмор Все
510 постов сначала свежее
Fantomas1994
Fantomas1994
5 месяцев назад

Рубрика "Сломай нейронку". Опасные итераторы)⁠⁠

Рубрика "Сломай нейронку". Опасные итераторы) C++, Программирование, Ооп, ChatGPT, Длиннопост, Скриншот
Показать полностью 1
[моё] C++ Программирование Ооп ChatGPT Длиннопост Скриншот
16
11
neverending.cpp
neverending.cpp
5 месяцев назад
Лига программистов C/C++

Книга по C++, которую ты обязан прочитать в 2025 году⁠⁠

Я почему-то уверен, что она у тебя уже есть. Либо в списке литературы для самообразования, либо где-то среди скачанных pdf, а может, даже в печатном виде. Возможно, ты даже начинал её читать, но… работа, таски, собеседования… деньги вроде и так платят… и ты так и не осилил Мейерса "Эффективный и современный С++".

А ведь именно эта книга — ключ, который поможет тебе пробить потолок уровня middle и начать движение к senior.

Да, можно скачать список из 400 популярных вопросов, выучить их и бодро ответить на вопрос: «Расскажи про std::unique_ptr». А потом тебе прилетает дополнительный вопрос: «А как изменится размер std::unique_ptr при использовании пользовательского удалителя?» Иии… Я не буду додумывать твой уровень знаний. Попробуй сам ответить на этот вопрос и поставь себе оценку🙂
И это только один из примеров тонких нюансов, которые описаны в этой книге и которые реально спрашивают на собеседованиях.

Ещё одна сильная сторона книги: почти каждая фича современного C++ иллюстрируется примерами её использования в реальном проде. А это большая редкость для технической литературы.

Хватит откладывать эту книгу на «потом». Поставь цель на этот год и, наконец-то, найди время, чтобы прочитать 300 страниц "Эффективного и современного С++".

Книга по C++, которую ты обязан прочитать в 2025 году Кросспостинг, Pikabu Publish Bot, IT, C++, Программирование, Книги, Самообразование
Показать полностью 1
[моё] Кросспостинг Pikabu Publish Bot IT C++ Программирование Книги Самообразование
27
3
neverending.cpp
neverending.cpp
5 месяцев назад

Что такое nullptr?⁠⁠

Я бы с ходу ответил что-то подобное:
`nullptr` в C++ — это ключевое слово, которое используется для обозначения нулевого указателя. Оно было введено в стандарт C++11, чтобы заменить старый стиль использования литерала `NULL` или просто числа `0` для указания на нулевой указатель.

А теперь представьте, что вы общаетесь с С-программистом, который знает, что такое указатель и как его занулить. Ваша задача — объяснить, что такое nullptr "под капотом" и чем его устройство отличается от NULL. С NULL всё банально: в зависимости от реализации это может быть либо просто макрос для 0, либо каст 0 к void-указателю. Например:
#define NULL 0
или
#define NULL ((void *)0)

Начнём разбираться

Изучение любой непонятной C++ штуки традиционно начинаем с чтения cppreference :
Ключевое слово nullptr обозначает литерал указателя. Это prvalue типа std::nullptr_t.

Окей, nullptr — это константа времени компиляции, которую можно присвоить только указателю, чтобы занулить его. Но что такое std::nullptr_t?

Читаем cppreference далее:
std::nullptr_t — это тип литерала нулевого указателя nullptr. Это особый тип, который сам по себе не является типом указателя или указателем на тип элемента. Его значениями являются константы нулевого указателя.

Много букв. Так становится намного понятнее:
using nullptr_t = decltype(nullptr);

Как видите, стандарт явно не описывает внутреннее устройство nullptr, но информация о том, что sizeof(std::nullptr_t) равно sizeof(void*), намекает, что nullptr реализуется на аппаратном уровне как указатель на адрес 0.

Вопрос на засыпку: можно ли получить nullptr в результате вычислений?

P.S.: Для любителей бескомпромиссного чтива https://eel.is/c++draft/support.types.nullptr

Показать полностью
[моё] Кросспостинг Pikabu Publish Bot Текст C++ IT Программирование
3
neverending.cpp
neverending.cpp
5 месяцев назад

Наводим суету с live lock⁠⁠

Live lock — это ситуация, когда несколько потоков постоянно меняют своё состояние в ответ на действия друг друга, но при этом никто не достигает прогресса. Это отличается от dead lock тем, что потоки не блокируются полностью, а продолжают выполнение, но не продвигаются вперёд.

Простой пример: два вежливых сотрудника идут навстречу друг другу по коридору. Когда они встречаются, первый отходит вправо, а второй — влево. Они снова оказываются друг напротив друга. Первый отходит влево, а второй — вправо, но вновь оказываются на пути друг друга.

Ниже приведён пример, который воспроизводит эту ситуацию. В большинстве случаев программа будет крутиться в бесконечном цикле.

#include <iostream>
#include <thread>

enum class Position
{
left,
right
};

void moveA(Position& positionA, const Position& positionB)
{
while (true)
{
if (positionA != positionB)
{
break;
}
if (positionB == Position::right)
{
std::cout << "A sees B on the right, moves back to left\n";
positionA = Position::left;
}
std::cout << "A moves to the right\n";
positionA = Position::right;
}
}

void moveB(const Position& positionA, Position& positionB)
{
while (true)
{
if (positionA != positionB)
{
break;
}
if (positionA == Position::right)
{
std::cout << "B sees A on the right, moves back to left\n";
positionB = Position::left;
}
std::cout << "B moves to the right\n";
positionB = Position::right;
}
}

int main()
{
Position positionA{Position::left};
Position positionB{Position::left};

std::thread t1(moveA, std::ref(positionA), std::cref(positionB));
std::thread t2(moveB, std::cref(positionA), std::ref(positionB));

t1.join();
t2.join();
}

Показать полностью
[моё] Кросспостинг Pikabu Publish Bot Текст IT C++ Программирование
1
neverending.cpp
neverending.cpp
6 месяцев назад

Почему твоё резюме никто не смотрит?⁠⁠

А на твои отклики не приходит ответ? Или, что ещё хуже, тебе сразу отказывают?
Давай разберёмся.

Знаешь, как выглядит большинство резюме C++ разработчиков? Примерно так:
Январь 2024 — по настоящее время
ИТЦ "СамаяЛучшаяКампания" — Ведущий программист
- Разработка приложений для нужд производства
- Написание тестов

Май 2023 — Декабрь 2024
ОАО "ОтличнаяКомпания" — Старший инженер-программист
- Создание виджетов на Qt
- Написание документации
- Ведение переговоров с заказчиком

и так далее...

Выглядит знакомо? Увы, такие резюме обречены на провал.

Почему?

Парсеры. Машина просто проигнорирует такой текст. А значит, твоё резюме не попадёт в базу крупной компании или рекрутингового агентства.

Ручной отбор. Даже если компания проверяет резюме вручную, оно, скорее всего, окажется в самом конце списка кандидатов. А то и сразу получит отказ.

Конечно, и с таким резюме можно найти работу. Например, его может заметить начинающий HR, которому нужно срочно закрыть вакансию. Но факт остаётся фактом: шансы получить работу с таким резюме гораздо ниже.

В чём проблема?

Как думаешь, что именно не так с этим резюме? Или во всём виноват рынок с его странными требованиями?

Показать полностью
[моё] Кросспостинг Pikabu Publish Bot Текст Программирование IT C++ Резюме Карьер
7
0
neverending.cpp
neverending.cpp
6 месяцев назад

Зачем используется ключевое слово explicit⁠⁠

Пример первый. Давайте посмотрим на код ниже (да, он собирается и запускается):
class A
{};

class B
{
public:
B(const A &)
{}
};

void foo(const B &)
{}

int main()
{
A a;
foo(a);
}

Я специально убрал все лишние строчки из кода, чтобы вы смогли сосредоточиться на всей абсурдности происходящего: при вызове функции foo тип A преобразовывается в тип В, при этом мой компилятор даже с выкрученными флагами ворнингов не выдал мне никакого предупреждения. Что-то мне подсказывает, что это не то поведение, которое можно завещать потомкам (т.е. разрабам, которые будут работать с вашим кодом).
Если воспользоваться услугами сайта https://cppinsights.io/, можно увидеть, что компилятор преобразует код функции main в следующий:
int main()
{
A a;
foo(B(a));
return 0;
}
Т.е. в момент вызова функции foo из объекта класса A создается временный объект класса B.
Фиксится эта проблема с помощью использования спецификатора explicit перед конструктором класса B.

Продолжение следует.

Показать полностью
[моё] Кросспостинг Pikabu Publish Bot Текст IT Программирование C++
5
3
neverending.cpp
neverending.cpp
7 месяцев назад
Лига программистов

ООП. Вспомнить всё⁠⁠

Мэтт Вайсфельд "Объектно-ориентированный подход". Автору удалось осветить в этой книге практически все темы, касающиеся ООП, и сделать это всего лишь на 250 страницах (!): разбор принципов ООП на примерах, рекомендации по проектированию классов, извечный вопрос применимости множественного наследования, разбор принципов SOLID с внятными примерами и даже паттерны! Притом качество и глубина изложения материала не пострадала. Книгу можно читать как новичку, так и разработчику с опытом. Новичок получит в ней ценные ориентиры для дальнейшего углубленного изучения ООП, разработчику с опытом книга поможет упорядочить свои знания или подготовиться к ООП-нагруженному собеседованию.

Технические посты тут t.me/neverending_cpp

ООП. Вспомнить всё Программирование, IT, Книги, Самообразование, Разработка, C++
Показать полностью 1
[моё] Программирование IT Книги Самообразование Разработка C++
2

Продвиньте ваш пост

Перейти
Партнёрский материал Реклама
specials
specials

Нужно больше внимания к постам? Есть способ!⁠⁠

Иногда даже самый интересный материал теряется в потоке новых записей. Если ваш пост остался незамеченным, измените ситуацию. Для этого на Пикабу есть продвижение.

Все просто: оставьте заявку в форме, добавьте ссылку на пост и выберите подходящий бюджет. Все. Ваш пост покажут во всех лентах на специальных позициях. Ну а вы получите дополнительную аудиторию и отклик пользователей.

Продвинуть пост

Продвижение Посты на Пикабу Текст
neverending.cpp
neverending.cpp
7 месяцев назад
Лига программистов

А вы правильно оформляете commit-message?⁠⁠

Я надеюсь, что да, но на всякий случай приведу несколько распространенных рекомендаций по оформлению коммитов. Если я что-то упустил, жду вас в комментариях.
🔹Длина заголовка коммита не должна превышать 50 символов
Это сделано исключительно для удобства чтения журнала проекта.
🔹Формат заголовка коммита зависит от соглашений в конкретной команде.
В разных проектах разные требования к формату заголовка. Например, есть требование в начале заголовка размещать номер тикета: "WTF-42: some question fix". Или же в начале заголовка указывать компонент, в который были внесены изменения "tests: unit: add some question test". Точка в конце заголовка не ставится.
🔹Заголовок коммита содержит краткое описание проделанных изменений.
Заголовок коммита должен отвечать на вопрос: какие изменения были сделали в проекте? Не более. Подробности и причины сделанных изменений нужно перенести в тело коммита.
🔹Между заголовком коммита и телом нужно оставлять пустую строку.
Очередная рекомендация, которая повышает читаемость журнала. В консоли эта рекомендация не сильно заметна, а вот GitLab и GitHub с помощью пустой строки умеют отображать заголовок коммита и скрывать его тело.
🔹Тело коммита не ограничено, а вот строка в теле коммита не должна превышать 72 символа.
Тело коммита не является обязательным, но его наличие позволяет без изучения кода лучше понять, что и почему было сделано. Т.е. если был исправлен баг, то нужно описать условия при которых он проявлялся и каким образом был исправлен. Если новая фича, нужно написать на основе каких требований она была добавлена. Можно приложить ссылки на спецификации, обсуждения, но нужно быть уверенным, что ссылки останутся актуальными через несколько лет. Важно: не нужно писать в теле коммита, как вы делали задачу.
🔹Уточните, нужно ли подписывать коммит.
Чаще всего это требование встречается при работе с open source продуктами. Коммит подписывается с помощью закрытого ключа, таким образом, вы подтверждаете вашу идентичность.

p.s.: а еще шаблон коммита можно прописать в git pre-commit hook

Технические посты тут t.me/neverending_cpp

Показать полностью
[моё] Кросспостинг Pikabu Publish Bot Текст IT Git C++ Программирование Самообразование
16
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии