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 подскажет развёрнутый ответ в реальном времени.