在赋值的右边递减 size_t

Decrementing size_t on the right hand of assignment

为什么在这种情况下 idx1 -1?

long long idx = (size_t)0 - 1;

cout << (size_t)0 - 1; 这打印 ULLONG_MAX

cout << idx; 这会打印 -1

如果 idx 是整数,会有什么变化?

在此声明中

cout << (size_t)0 - 1;

由于通常的算术转换,表达式(size_t)0 - 1的类型是无符号整数类型size_t。因为它不能为负,所以它的值为 ULLONG_MAX(似乎在使用的系统中类型 size_t 被定义为类型 unsigned long long int 的别名)。

在此声明中

long long idx = (size_t)0 - 1;

初始化器被转换为带符号的 long long int 类型,即声明对象的类型。 UNIT_MAX 值无法放入 signed long long,因此它给出 -1.

因为所用系统中类型size_t的宽度与long long int类型的宽度相同。因此,size_t 类型初始化器的内部表示被解释为 long long 类型的值。无符号初始化器的最高有效位被视为符号 bit.int.