Hardсинтаксис
Что такое most vexing parse и как его избежать?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Most vexing parse — ситуация, когда C++ интерпретирует конструкцию как объявление функции, хотя программист имел в виду создание объекта.
class Widget {};
class Timer {};
Widget w(Timer()); // most vexing parse: ОБОЗНАЧЕНИЕ ФУНКЦИИ,
// принимающей Timer() и возвращающей Widget
// Избегают фигурными скобками (C++11):
Widget w{Timer{}}; // объект, не функция
// или дополнительными скобками:
Widget w((Timer())); // объектC++11 brace init практически убил эту проблему, но в старом коде она встречается.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.