Программирование. Принципы и практика использования C++ Исправленное издание, стр. 40
Этот фрагмент программы выводит на экран следующий результат:
x 120 xВ этом смысле — то, что значение всегда преобразуется в эквивалентное значение или (для типа
<b>double</b>boolcharboolintbooldoublecharintchardoubleintdoubleНаиболее полезным является преобразование переменной типа
intdoubledouble d1 = 2.3;double d2 = d1+2; // перед сложением число преобразуется в число 2.0if (d1 < 0) // перед сравнением число 0 преобразуется в число 0.0 cout("d1 — отрицательно");Для действительно больших чисел типа
<b>int</b><b>double</b>3.9.2. Опасные преобразования
Рассмотрим пример.
int main(){ int a = 20000; char c = a; // попытка втиснуть большое значение типа int // в маленькую переменную типа char int b = c; if (a != b) // != означает "не равно" cout << "Ой!: " << a << "!=" << b << '\n'; else cout << "Ого! Мы получили большие значения типа char\n";}Такие преобразования называют “сужающими”, поскольку они заносят значение в объект, размер которого слишком мал (“узок”) для их хранения. К сожалению, лишь некоторые компиляторы предупреждают об опасной инициализации переменной типа
charintintcharintcharbint main(){ double d = 0; while (cin>>d) { // повторяем последующие инструкции, // пока мы вводим целые числа int i = d; // попытка втиснуть double в int char c = i; // попытка втиснуть int в char int i2 = c; // получаем целое значение переменной типа char cout << " d==" << d // исходное значение типа double << " i==" << i // преобразуется в значение типа int << " i2==" << i2 // целое значение переменной типа char << " char(" << c << ")\n"; // значение типа char }}Использованная в этой программе инструкция
whileПОПРОБУЙТЕ
Выполните эту программу, вводя разные значения. Попробуйте ввести небольшие значения (например,
231271000568912856.956.2doubleintintcharcharВы обнаружите, что многие числа приводят к бессмысленным результатам. Образно говоря, это происходит, когда вы пытаетесь перелить жидкость из четырехлитровой канистры в поллитровую банку. Все перечисленные ниже преобразования выполняются компилятором, несмотря на их опасность.
doubleintdoublechardoublebool