Они по умолчанию защищают от незаметных преобразований типов и выбирают очевидный способ создания объектов.
Что важно знать:
• Защита от потерь;
• Читается одинаково везде;
• Выявляет скрытые ошибки.
Ставьте фигурные скобки по умолчанию, а круглые оставьте для редких, явно нужных особых случаев.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24🤝9👍3❤1
Вместо
nullptr
, -1
или "N/A"
теперь можно возвращать отсутствие значения безопасно и явно — с помощью std::optional
.Пример: функция
find_name()
возвращает std::optional<std::string>
. Если элемент найден — вернёт строку, если нет — std::nullopt
.🔥 Явно показывает, что результат может отсутствовать и избавляет от неочевидных ошибок и nullptr-проверок,
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤6👍3
Думаешь о переходе в DevOps, но не знаешь, с чего начать?
Это нормально. Всё больше разработчиков смотрят в сторону DevOps — там выше зарплаты, интереснее задачи и виден весь продукт, а не только код.
Но часто мешают сомнения:
🤔 «Я не админ, слишком сложно»
😑 «Потеряю кучу времени»
😬 «Придётся учить всё с нуля»
На деле — у тебя уже есть база: ты понимаешь код, работаешь с Git и умеешь автоматизировать задачи. Этого достаточно, чтобы уверенно перейти в DevOps.
Твой план может выглядеть так:
1️⃣ Linux и CI/CD (Jenkins, GitLab CI, GitHub Actions)
2️⃣ Контейнеры — Docker, Kubernetes
3️⃣ Облака — AWS, GCP или Azure
4️⃣ Pet-проекты и open source
5️⃣ DevOps-задачи в текущей команде
На всё уйдёт 6–12 месяцев при системном подходе.
А если хочешь ускорить процесс и избежать ошибок — запишись на бесплатную консультацию с тьютором.
📍Что ты получишь:
— оценку текущего уровня,
— индивидуальный план перехода,
— рекомендации по инструментам.
🔗 Выбери удобное время — в боте.
Кажется, что путь в DevOps — сплошные грабли, но на деле это ровная дорога, если идти с картой 😉
Это нормально. Всё больше разработчиков смотрят в сторону DevOps — там выше зарплаты, интереснее задачи и виден весь продукт, а не только код.
Но часто мешают сомнения:
🤔 «Я не админ, слишком сложно»
😑 «Потеряю кучу времени»
😬 «Придётся учить всё с нуля»
На деле — у тебя уже есть база: ты понимаешь код, работаешь с Git и умеешь автоматизировать задачи. Этого достаточно, чтобы уверенно перейти в DevOps.
Твой план может выглядеть так:
1️⃣ Linux и CI/CD (Jenkins, GitLab CI, GitHub Actions)
2️⃣ Контейнеры — Docker, Kubernetes
3️⃣ Облака — AWS, GCP или Azure
4️⃣ Pet-проекты и open source
5️⃣ DevOps-задачи в текущей команде
На всё уйдёт 6–12 месяцев при системном подходе.
А если хочешь ускорить процесс и избежать ошибок — запишись на бесплатную консультацию с тьютором.
📍Что ты получишь:
— оценку текущего уровня,
— индивидуальный план перехода,
— рекомендации по инструментам.
🔗 Выбери удобное время — в боте.
Кажется, что путь в DevOps — сплошные грабли, но на деле это ровная дорога, если идти с картой 😉
Многие уверены, что при возврате локального объекта из функции обязательно сработает копирование или хотя бы перемещение.
Но это не так. Правильный ответ: ничего не копируется и не мувится вовсе.
Компилятор просто создаёт объект сразу на месте вызова функции — это и есть Named Return Value Optimization (NRVO).
Разберёмся на примере:
Многие ждут хотя бы
Ни копии, ни мува.
Объект
Теперь внесём "улучшение", которое сломает оптимизацию:
Результат:
Добавив
🔥 Не вставляйте
Дайте компилятору сделать работу за вас.
📣 C++ Ready | #практика
Но это не так. Правильный ответ: ничего не копируется и не мувится вовсе.
Компилятор просто создаёт объект сразу на месте вызова функции — это и есть Named Return Value Optimization (NRVO).
Разберёмся на примере:
#include <iostream>
struct Probe {
Probe() { std::cout << "default\n"; }
Probe(int) { std::cout << "ctor\n"; }
Probe(const Probe&) { std::cout << "copy\n"; }
Probe(Probe&&) noexcept { std::cout << "move\n"; }
};
Probe makeProbe(int x)
{
Probe p{x};
return p; // ← здесь сработает NRVO
}
int main()
{
auto obj = makeProbe(42);
}
Многие ждут хотя бы
move
, но результат:ctor
Ни копии, ни мува.
Объект
p
создаётся сразу в месте obj
— без промежуточных конструкторов.Теперь внесём "улучшение", которое сломает оптимизацию:
Probe makeMoved(int x)
{
Probe p{x};
return std::move(p); // кажется, мы помогаем...
}
Результат:
ctor
move
Добавив
std::move
, мы запретили NRVO и заставили компилятор действительно переместить объект.🔥 Не вставляйте
std::move
, если возвращаете локальный объект по имени.Дайте компилятору сделать работу за вас.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🔥3
Программисты из Telegram создали сильнейшие IT- каналы
🐍 Ghostly Python - автоматизируй всё, что можешь. Боты, скрипты, парсеры, утилиты - делаем Python простым и полезным. Уверенный старт для новичков и не только.
☕️ Easy Java - Java без боли. От основ до фреймворков. Просто, понятно и по делу. Если хочешь реально понять язык - тебе сюда.
😎 IT Syndicate - главный хаб для тех, кто живёт IT. GameDev, InfoSec, Frontend, DevOps, AI и многое другое. Готовь мозг, тут будет жарко.
🧡 Ghostly Frontend - фронтенд без лишнего шума. HTML, CSS, JavaScript, React, Vue — всё, что нужно, чтобы создавать быстрые и красивые интерфейсы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👎2