cpp

Приведение типов

Как вы уже знаете, при объявлении переменной можно указать определенный тип данных. Если тип данных не указан, то он определяется автоматически по контексту при инициализации. Далее над переменной можно производить операции, предназначенные для этого типа данных. Если в выражении используются переменные, имеющие разный тип данных (даже если преобразование можно выполнить без потерь), то компилятор выведет сообщение об ошибке:

var x int = 15
var y int8 = 10
x = y + x          // Ошибка !
// invalid operation: y + x (mismatched types int8 and int)

Чтобы избежать ошибки нужно явным образом выполнить приведение типов. Формат приведения:

<Тип результата>(<Выражение или переменная>)

Пример:

var x int = 15
var y int8 = 10
x = int(y) + x     // OK
fmt.Println(x)     // 25

В этом случае компилятор считает, что мы знаем, что делаем, и осведомлены о возможном несоответствии значения указанному типу данных. Если значение выражения будет выходить за диапазон значений типа, то произойдет усечение результата, но никакого сообщения об ошибке не появится. Давайте рассмотрим это на примере:

var x, y int = 127, 128
var z int8 = int8(x)
fmt.Println(z)          // OK. 127
z = int8(y)
fmt.Println(z)          // Усечение. -128

Результатом первого выражения будет число 127, которое входит в диапазон значений типа int8, а вот результат второго выражения — число 128 — в диапазон не входит, и происходит усечение. В итоге мы получили число –128. Согласитесь, мы получили совсем не то, что хотели. Поэтому приведением типов нужно пользоваться осторожно. Хотя в некоторых случаях такое усечение очень даже полезно. Например, вещественное число можно преобразовать в целое. В этом случае дробная часть просто отбрасывается:

var x = 2.5
var y int = int(x)
fmt.Println(y)          // 2

Рассмотрим пример, который демонстрирует частый способ применения приведения типов. В языке Go деление целых чисел всегда возвращает целое число. Дробная часть при этом просто отбрасывается. Чтобы деление целых чисел возвращало вещественное число, необходимо выполнить приведение типов:

var x, y int = 10, 3
fmt.Println( x / y )                   // 3
fmt.Println( float64(x) / float64(y) ) // 3.3333333333333335

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp