РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
695 of 815 menu

Ключевое слово explicit

Ключевое слово explicit указывается перед конструктором или оператором преобразования и запрещает компилятору выполнять неявные преобразования типов с использованием этого конструктора или оператора. Без explicit конструктор с одним параметром может вызываться автоматически для приведения типа, что порой приводит к неожиданному поведению программы. Ключевое слово explicit не принимает параметров и применяется только к конструкторам и операторам преобразования.

Синтаксис

explicit ClassName(parameters); explicit operator TypeName() const;

Пример

Рассмотрим класс Number с конструктором, принимающим одно целое число. Без explicit компилятор позволяет неявно преобразовывать число 42 в объект класса:

#include <iostream> using namespace std; class Number { public: int value; Number(int v) { value = v; } }; void print(Number n) { cout << n.value << endl; } int main() { print(42); return 0; }

Результат выполнения кода:

42

Пример

Теперь добавим explicit к конструктору. Неявное преобразование станет невозможным, и вызов print(42) приведёт к ошибке компиляции. Придётся явно создавать объект:

#include <iostream> using namespace std; class Number { public: int value; explicit Number(int v) { value = v; } }; void print(Number n) { cout << n.value << endl; } int main() { print(Number(42)); return 0; }

Результат выполнения кода:

42

Пример

Ключевое слово explicit можно применять и к операторам преобразования. Рассмотрим класс Flag, который хранит логическое значение и преобразуется в bool только явно:

#include <iostream> using namespace std; class Flag { private: bool state; public: Flag(bool s) { state = s; } explicit operator bool() const { return state; } }; int main() { Flag f(true); if (static_cast<bool>(f)) { cout << "true" << endl; } return 0; }

Результат выполнения кода:

true

Смотрите также

  • ключевое слово constructor,
    который создаёт объект класса
  • ключевое слово copy-ctor,
    который создаёт копию объекта
  • ключевое слово operator,
    который перегружает операторы класса
  • ключевое слово deleted,
    который запрещает использование метода
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить