•
unsigned), то результирующее значение будет иметь столько же битов, сколько и источник, при условии, что оно может поместиться в целевой области памяти (старшие биты при необходимости могут быть отброшены). Если целевой тип имеет знак, то значение останется без изменения, при условии, что его можно представить с помощью целевого типа; в противном случае значение определяется реализацией языка. Обратите внимание на то, что типы bool и char являются целочисленными.•
double считается продвижением.•
void* (см. разделы 17.8 и 27.3.5). Указатель (ссылка) на производный класс можно неявно преобразовать в указатель (ссылку) на доступный и однозначно определенный базовый класс (см. раздел 14.3). Константное выражение (см. разделы A.5 и 4.3.1), равное нулю, можно неявно преобразовать в любой другой тип указателя. Указатель типа T* можно неявно преобразовать в указатель const T*. Аналогично ссылку T& можно неявно преобразовать в ссылку типа const T&.•
bool. Ненулевое значение преобразовывается в значение true, а нуль — в значение false.•
•
1. Если один из операндов имеет тип long double
long double. В противном случае, если один из операндов имеет тип double, другой преобразовывается в тип double. В противном случае, если один из операндов имеет тип float, другой преобразовывается в тип float. В противном случае над обоими операндами целочисленного типа выполняется продвижение. 2. Если один из операндов имеет тип unsigned long
unsigned long. В противном случае, если один из операндов имеет тип long int, а другой — unsigned int, значение типа unsigned int преобразуется в значение типа long int, при условии, что тип long int может представить все значения типа unsigned int. В противном случае оба операнда преобразовываются в тип unsigned long int. В противном случае, если один из операндов имеет тип long, другой преобразовывается в тип long. В противном случае, если другой операнд имеет тип unsigned, другой преобразовывается в тип unsigned. В противном случае оба операнда имеют тип int.Очевидно, что лучше не полагаться на слишком запутанные сочетания типов и минимизировать необходимость неявных преобразований.
A.5.2.3. Преобразования, определенные пользователем
Кроме стандартных преобразований и продвижений, программист может определить преобразования типов, определенных пользователем. Конструктор, принимающий один аргумент, определяет преобразование этого аргумента в значение своего типа. Если конструктор имеет спецификатор explicit
A.5.3. Константные выражения