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

Неявное преобразование

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

Неявные преобразования делятся на несколько категорий: стандартные преобразования (арифметические преобразования, преобразования указателей, преобразования в логический тип) и пользовательские преобразования (через конструкторы с одним параметром и операторы преобразования).

Синтаксис

// Арифметическое преобразование int a = 10; double b = a; // int неявно преобразуется в double // Преобразование в логический тип int c = 5; bool d = c; // int неявно преобразуется в bool // Преобразование через конструктор class MyClass { public: MyClass(int x) {} }; MyClass obj = 42; // int неявно преобразуется в MyClass // Преобразование через оператор class MyClass2 { public: operator int() const { return 0; } }; MyClass2 obj2; int e = obj2; // MyClass2 неявно преобразуется в int

Пример

Давайте рассмотрим неявное преобразование целого числа в число с плавающей точкой:

#include <iostream> using namespace std; int main() { int a = 5; double b = a; cout << b << endl; return 0; }

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

5

Пример

Давайте рассмотрим неявное преобразование целого числа в логический тип. Любое ненулевое значение преобразуется в true, а нулевое - в false:

#include <iostream> using namespace std; int main() { int a = 5; int b = 0; bool c = a; bool d = b; cout << c << " " << d << endl; return 0; }

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

1 0

Пример

Давайте рассмотрим неявное преобразование через пользовательский конструктор с одним параметром:

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

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

42

Пример

Давайте рассмотрим неявное преобразование через пользовательский оператор преобразования:

#include <iostream> using namespace std; class Number { private: int value; public: Number(int v) : value(v) {} operator int() const { return value; } }; int main() { Number num(42); int res = num; cout << res << endl; return 0; }

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

42

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

  • оператор static_cast,
    который выполняет явное преобразование на этапе компиляции
  • оператор dynamic_cast,
    который выполняет безопасное преобразование полиморфных типов
  • оператор const_cast,
    который снимает или добавляет квалификатор const
  • оператор reinterpret_cast,
    который выполняет низкоуровневое переинтерпретирование битов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить