Mediumконструктор
Чем explicit конструктор полезен?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
explicit запрещает неявные преобразования через конструктор. Особенно важно для конструкторов с одним аргументом (они определяют неявное преобразование). С C++11 распространяется на conversion operators.
class Distance {
int meters_;
public:
explicit Distance(int m) : meters_(m) {} // без explicit: f(42) сработало бы
};
void take(Distance d);
take(42); // ошибка: нет неявного преобразования
take(Distance(42)); // OK: явное
take({42}); // OK: brace-init не отключается explicit- Без explicit:
void f(Foo); f(42);молча создаст Foo из 42; explicit operator bool()предотвращает неожиданные bool-преобразования (if (stream << x));- Правило: делайте single-argument конструкторы explicit, если преобразование не желательно семантически.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.