在赋值的右边递减 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.
为什么在这种情况下 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.