Structured bindings выглядят просто, но есть подводные камни, которые ловят даже опытные разработчики.1️⃣ Забыли & и получили копию
struct Heavy {
std::vector<int> data{1'000'000};
};
std::pair<int, Heavy> getPair();
// ❌ Копирование элементов!
auto [id, heavy] = getPair();
// ✅ Работа через ссылку
auto& [id, heavy] = getPair();2️⃣ Неправильное количество переменных
std::tuple<int, int, int> getCoords();
// ❌ Ошибка компиляции
auto [x, y] = getCoords(); // Нужно ровно 3 переменные!
// ✅ Правильно
auto [x, y, z] = getCoords();
3️⃣ Dangling references
// ❌ ОПАСНО!
const auto& [x, y] = std::make_pair(1, 2);
// Временный объект уничтожен, x и y невалидны
// ✅ БЕЗОПАСНО
auto [x, y] = std::make_pair(1, 2);
4️⃣ Попытка модифицировать const
const auto [x, y] = getPair();
x = 10; // ❌ Ошибка: x — константа!
// Нужно:
auto [x, y] = getPair(); // Без const
5️⃣ Неправильные ожидания от типов
std::map<int, std::string> m{{1, "one"}};
// key имеет тип const int&, не int&!
for (auto& [key, value] : m) {
key = 2; // ❌ Ошибка компиляции!
}✏️ Какие ошибки совершали вы? Поделитесь в комментариях!
🔹 Курс «Алгоритмы и структуры данных»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
Библиотека C/C++ разработчика
#константная_правильность