Неявные преобразования (Implicit Conversions)

В некоторых ситуациях выражение и его типы будут неявно преобразованы в другой тип. В таблице ниже показаны все разрешенные неявные преобразования:

Тип выражения Может быть неявно преобразован в
int uint
int uint float
int uint float double
ivec2 uvec2
ivec3 uvec3
ivec4 uvec4
ivec2; uvec2 vec2
ivec3; uvec3 vec3
ivec4; uvec4 vec4
ivec2; uvec2; vec2 dvec2
ivec3; uvec3; vec3 dvec3
ivec4; uvec4; vec4 dvec4
mat2 dmat2
mat3 dmat3
mat4 dmat4
mat2x3 dmat2x3
mat2x4 dmat2x4
mat3x2 dmat3x2
mat3x4 dmat3x4
mat4x2 dmat4x2
mat4x3 dmat4x3

Отсутствует неявное преобразование массива или структуры. Например, массив int не может быть неявно преобразован в массив float.

Неявное преобразование — это не повторная интерприетация бытового паттерна выражения, это преобразование его значения в эквивалентное значение нового типа. Например, целочисленное значение -5 будет преобразовано в значение с плавающей запятой -5.0. Целочисленные значения имеют больше бит точности, чем мантисса одинарной точности (пример), что может привести к потере точности при преобразовании в float.

При выполнении неявного преобразования для бинарных операторов, может быть несколько типов данных, к которым могут быть преобразованы два операнда. Например при добавлении значения int к значению uint оба значения могут быть неявно преобразованы в uint, float и double. В таких случаях если один из операндов имеет тип с плавающей точкой, то выбирается тип с плавающей точкой. В противном случае выбирается целочисленный тип без знака, если любой операнд имеет целочисленный тип без знака. Ну и в остатке выбирается целочисленный тип со знаком. Если же операнды могут быть неявно преобразованы в несколько типов данных, полученных из одного и того же базового типа данных, используется тип с наименьшим размером компонента.

Преобразования в таблице выше выполняются только в соответствии с другими разделами этой спецификации.

Main Admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *