Ключевое слово explicit в C++ используется для предотвращения неявных преобразований типов. Оно применяется к конструкторам, чтобы запретить компилятору автоматически преобразовывать типы при инициализации объектов или при передаче аргументов в функции.
Пример использования explicit
Рассмотрим пример, где мы создаем класс с конструктором, который принимает целое число:
#include <iostream>
class MyClass {
public:
explicit MyClass(int value) : value(value) {}
int getValue() const {
return value;
}
private:
int value;
};
int main() {
MyClass obj1(10); // Корректная инициализация
std::cout << "Value: " << obj1.getValue() << std::endl; // 10
// MyClass obj2 = 20; // Ошибка компиляции: неявное преобразование запрещено
MyClass obj3 = MyClass(20); // Явное создание объекта
std::cout << "Value: " << obj3.getValue() << std::endl; // 20
return 0;
}
