Определите неявное приведение и явное приведение
Буду признателен, если кто-нибудь ответит на мой вопрос.
Определить неявное приведение и явное приведение?
int a = 2, b = 3;
float f = 2.5;
double d = -1.2;
int int_result;
float real_result;
4 ответа
Формально вопрос не имеет смысла с терминологической точки зрения. Там нет такой вещи, как "неявное приведение". Вся суть термина cast заключается в том, что он обозначает явно запрашиваемую конверсию. Преобразование - это преобразование типа, явно запрошенное оператором (type)
форма.
То, что в этом случае может быть явным или неявным, называется преобразованием. Это то, что, вероятно, подразумевал автор вопроса, но облажался из-за плохого знания терминологии языка C.
В вашем примере кода только одна инициализация требует преобразования. И, конечно же, это преобразование является неявным, поскольку в вашем коде нет приведений.
По определению приведение всегда явное. То, что подразумевается, является преобразованием. Когда объекту присваивается значение, не являющееся типом объекта, может произойти одно из двух:
- тип значения "совместим" с типом объекта, т. е. стандарт допускает такое присвоение. Затем компилятор выполняет преобразование для вас. Это называется неявным преобразованием. Например,
size_t i = -1;
имеет неявное преобразованиеint
-1 доsize_t
, - в противном случае компилятор должен выдать диагностику в этом случае, и вам нужно преобразование для выполнения назначения. Результатом такого приведения является либо реализация, либо неопределенная.
Учитывая вышесказанное, вам редко нужны приведения в 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;
В приведенных выше утверждениях нет явного приведения.