Я бы спросил об управлении ресурсами / памятью, потому что это важный вопрос в C ++, и он не требует конкретного кода. Просто набросайте простой гипотетический сценарий и спросите, как они обеспечили бы освобождение какого-либо жизненно важного ресурса даже перед лицом ошибок / исключений. Скажем, они разрабатывают сетевое приложение, как они гарантируют, что мы правильно закроем наши сокеты? Конечно, правильный ответ будет заключаться в том, чтобы обернуть его в объект RAII, но не спрашивайте их об этом напрямую (легко ввести «RAII» в Google, в то время как приведенный выше вопрос «как бы вы обеспечили правильное высвобождение ресурсов» на самом деле показывает вам, или нет, они знают соответствующие приемы. Если они ответят «обернуть все в try / catch», у них может возникнуть проблема. И это хорошо связано с вопросами о различиях между кучей и стеком.
Возможно, вы также можете задать простой вопрос о безопасности исключений, который не требует никакого реального кода. В целом, я бы сказал, что обсуждение всех различных идиом C ++ может быть хорошей идеей, поскольку многие из них не требуют большого количества реального кода, но все еще являются жизненно важными концепциями, специфичными для языка.
Посмотрите, знают ли они о «умных» указателях (опять же, желательно, предоставив им ситуацию, в которой требуются «умные» указатели, и посмотрите, как они решат проблему), и, возможно, templates / metaprogrammin (в последнем случае, вероятно, просто выясните, если они знают, что это возможно, вместо того, чтобы требовать от них кодирования реальных метапрограмм на телефоне)
Вы также можете спросить о некоторых общих областях неопределенного поведения (каковы значения a и b после выполнения a = b++ + b++?
?) Или выделить массив из 10 элементов и добавить 10 или 11 к указателю массива. и спросите, каков результат в каждом случае (+ = 10 допустимо, дает указатель на конец, + = 11 не определено). Или дайте им сценарий, в котором им нужно скопировать множество объектов, и спросите, как они это делают (простое циклическое копирование каждого элемента за раз, memcpy или std :: copy - очевидные ответы. Обратите внимание на предостережения с memcpy , что это не безопасно для не POD объектов)
Или спросите об их стиле кодирования в целом. Как они относятся к итераторам? Они предпочитают простые старые петли? Они знают, как использовать std :: for_each или std :: transform?
Изменить:
Кажется, что предложение a = b++ + b++
(ответ - неопределенное поведение, кстати) вызвало множество комментариев. Возможно, люди слишком много читают об этом. Как сказал ОП, он предпочел бы задать конкретные (не абстрактные, а простые для объяснения / ответа / обсуждения по телефону) вопросы, которые позволили бы немного рассказать о навыках собеседника на С ++, и это просто (и да, возможно, придирчивый) тому пример. Причиной этого является то, что 1) оно имеет интуитивное значение, что неверно, и 2) вам необходимо иметь определенный уровень опыта работы с C ++, прежде чем вы поймете это. И конечно 3), это коротко и легко спросить по телефону. Никому не нужно записывать код. Нет, это не покажет, является ли кандидат «великим программистом», но, как я понял, вопрос тоже не был целью. Если кто-то понимает это неправильно, это ничего не значит вообще, но если они понимают это правильно, вы можете быть уверены, что они немного знают C ++. Но если вы прочитаете мой ответ еще раз, вы увидите, что это был всего лишь быстрый пример категории вопросов, которые, по моему мнению, должны быть представлены. C ++ полон неопределенного поведения, даже в коде, который выглядит совершенно безобидным и интуитивно понятным. Попросить кандидата распознать какой-то экземпляр этого может быть полезным, будь то приведенный выше пример "дважды изменить одну и ту же переменную в одном и том же выражении", или что-то другое.