通过 sizeof 会发生什么
What will happen passing sizeof
我有这个问题我不明白为什么我得到的结果不正确:
if(sizeof(int) > -1)
cout << "true" << endl;
else
cout << "false" << endl;
上面也总是打印false!但下面是正确的:
int n = sizeof(int);
// correct
if(n > -1)
cout << "true" << endl;
else
cout << "false" << endl;
谁能给我解释一下发生了什么事?谢谢。
sizeof
评估为 std::size_t
类型的常量。这是一个无符号类型,大到足以包含程序中任何对象的大小。上一句关键字是unsigned.
当您编写 sizeof(int) > -1
时,C++ 中的整数提升规则规定关系运算符的两个操作数将转换为相同类型(足够大的类型)。这是无符号类型。所以 -1
被转换为一些非常大的数字。 SIZE_MAX
准确地说。直接比较将始终评估为 false。
但在另一种情况下,您通过初始化将 std::size_t
转换为 int
(准确地说是复制初始化,但这不是重点)。 sizeof
运算符 returns 的值实际上可能不适合 int
,在这种情况下,该值将不会被保留。但在你的情况下它确实适合(基本类型相当小),并且在将正 int
与 -1
.
进行比较时你会得到预期的结果
sizeof
的结果是一个 std::size_t
值,这是一个无符号整数类型。也就是说,不能为负。
当您将无符号整数与位长度相等或更小的负数(如 -1
)进行比较时,负数会被解释为它的各个位代表一个巨大的正数,因此比较是假的。
int n = sizeof(int);
案例按预期工作,因为 sizeof
返回的无符号整数值首先转换为带符号的 int
。因此,您最终得到两个有符号整数的比较,它以预期的算术方式工作。
我有这个问题我不明白为什么我得到的结果不正确:
if(sizeof(int) > -1)
cout << "true" << endl;
else
cout << "false" << endl;
上面也总是打印false!但下面是正确的:
int n = sizeof(int);
// correct
if(n > -1)
cout << "true" << endl;
else
cout << "false" << endl;
谁能给我解释一下发生了什么事?谢谢。
sizeof
评估为 std::size_t
类型的常量。这是一个无符号类型,大到足以包含程序中任何对象的大小。上一句关键字是unsigned.
当您编写 sizeof(int) > -1
时,C++ 中的整数提升规则规定关系运算符的两个操作数将转换为相同类型(足够大的类型)。这是无符号类型。所以 -1
被转换为一些非常大的数字。 SIZE_MAX
准确地说。直接比较将始终评估为 false。
但在另一种情况下,您通过初始化将 std::size_t
转换为 int
(准确地说是复制初始化,但这不是重点)。 sizeof
运算符 returns 的值实际上可能不适合 int
,在这种情况下,该值将不会被保留。但在你的情况下它确实适合(基本类型相当小),并且在将正 int
与 -1
.
sizeof
的结果是一个 std::size_t
值,这是一个无符号整数类型。也就是说,不能为负。
当您将无符号整数与位长度相等或更小的负数(如 -1
)进行比较时,负数会被解释为它的各个位代表一个巨大的正数,因此比较是假的。
int n = sizeof(int);
案例按预期工作,因为 sizeof
返回的无符号整数值首先转换为带符号的 int
。因此,您最终得到两个有符号整数的比较,它以预期的算术方式工作。