int main()
{
short n1 = 8ll; // no warning
// warning C4305: 'initializing': truncation from '__int64' to 'short'
// warning C4309: 'initializing': truncation of constant value
short n2 = 88888ll;
}
Мой компилятор - это Visual Studio 2017.
Согласно cppref:
Тип целочисленного литерала - это первый тип, в котором значение может поместиться из списка типов, зависящих от того, какая числовая база и какой целочисленный-суффикс был использован.
Integer литерал с суффиксом ll
должен иметь значение long long int
; поэтому short n1 = 8ll
должно вызывать предупреждение, подобное short n2 = 88888ll
.
Предоставляет ли С++ любой целочисленный литерал неявно преобразован в short int
, если он достаточно мал?