Неявное преобразование типов
Язык определяет набор стандартных преобразований между объектами встроенного типа, неявно выполняющихся компилятором в следующих случаях:
· арифметическое выражение с операндами разных типов: все операнды приводятся к наибольшему типу из встретившихся. Это называется арифметическим преобразованием. Например:
int ival = 3; double dva1 = 3.14159; // ival преобразуется в double: 3.0 |
ival + dva1;
· присваивание значения выражения одного типа объекту другого типа. В этом случае результирующим является тип объекта, которому значение присваивается. Так, в первом примере литерал 0
типа int
присваивается указателю типа int*, значением которого будет 0. Во втором примере double
преобразуется в int.
// 0 преобразуется в нулевой указатель типа int* int *pi = 0; // dva1 преобразуется в int: 3 |
ivat = dva1;
· передача функции аргумента, тип которого отличается от типа соответствующего формального параметра. Тип фактического аргумента приводится к типу параметра:
extern double sqrt( double ); // 2 преобразуется в double: 2.0 |
cout << "Квадратный корень из 2: " << sqrt( 2 ) << endt;
· возврат из функции значения, тип которого не совпадает с типом возвращаемого результата, заданным в объявлении функции. Тип фактически возвращаемого значения приводится к объявленному. Например:
double difference( int ivati, int iva12 ) { // результат преобразуется в double return ivati - iva12; |
}