Определите неявное приведение и явное приведение

Буду признателен, если кто-нибудь ответит на мой вопрос.
Определить неявное приведение и явное приведение?

int a = 2, b = 3;

float f = 2.5;
double d = -1.2;
int int_result;
float real_result;

4 ответа

Формально вопрос не имеет смысла с терминологической точки зрения. Там нет такой вещи, как "неявное приведение". Вся суть термина cast заключается в том, что он обозначает явно запрашиваемую конверсию. Преобразование - это преобразование типа, явно запрошенное оператором (type) форма.

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

В вашем примере кода только одна инициализация требует преобразования. И, конечно же, это преобразование является неявным, поскольку в вашем коде нет приведений.

По определению приведение всегда явное. То, что подразумевается, является преобразованием. Когда объекту присваивается значение, не являющееся типом объекта, может произойти одно из двух:

  1. тип значения "совместим" с типом объекта, т. е. стандарт допускает такое присвоение. Затем компилятор выполняет преобразование для вас. Это называется неявным преобразованием. Например, size_t i = -1; имеет неявное преобразование int -1 до size_t,
  2. в противном случае компилятор должен выдать диагностику в этом случае, и вам нужно преобразование для выполнения назначения. Результатом такого приведения является либо реализация, либо неопределенная.

Учитывая вышесказанное, вам редко нужны приведения в C. Один из случаев, когда вам нужно приведение, может быть в функции с переменным числом, потому что компилятор не может выполнить неявное преобразование за вас. Другим примером может быть преобразование целого числа в указатель способом, определяемым реализацией.

Еще раз, нет такой вещи как неявное приведение.

Ну, на самом деле это домашняя работа в классе C, и был приведен пример ответа для первой строки wirtten в приведенном выше, который я не поняла: который был,

int_result = a * f;
// a is casted implicitly to float by the multiplication operation a*f,
// the product is then casted implicitly to int by the = (assignment) operation.
real_result = a * f;
real_result = (float) a * b;
d = a + b / a * f;
d = f * b / a + a;

Еще раз спасибо, с нетерпением ждем ваших ответов!:)

int a = 2, b = 3;

поплавок f = 2,5;

двойной d = -1,2; // Это неявное приведение.

int int_result;

float real_result;

В приведенных выше утверждениях нет явного приведения.

Другие вопросы по тегам