Easyаргументы
Чем передача по значению отличается от передачи по ссылке?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
По значению void f(T x) — копия объекта, изменения не видны вызывающему. По ссылке void f(T& x) — работа с оригиналом, изменения видны, нет копирования. const T& — «только чтение без копирования» для больших объектов.
void byValue(std::string s); // копия (дорого для string)
void byRef(std::string& s); // оригинал, можно менять
void byConstRef(const std::string& s); // только чтение, без копирования
void byMove(std::string&& s); // rvalue, для move-семантикиПравило выбора:
- маленькие (до 2–3 слов) типы — по значению;
- большие объекты —
const T&; - для модификации —
T&; - для transfer ownership —
T&&+std::move.
Возврат по значению (с RVO) часто лучше out-параметра.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.