我有这个问题我不明白为什么我得到不正确的结果:
if(sizeof(int) > -1)
cout << "true" << endl;
else
cout << "false" << endl;
Run Code Online (Sandbox Code Playgroud)
上面也总是打印错误!但下面是正确的:
int n = sizeof(int);
// correct
if(n > -1)
cout << "true" << endl;
else
cout << "false" << endl;
Run Code Online (Sandbox Code Playgroud)
谁能向我解释发生了什么?谢谢.
sizeof评估为std::size_t类型的常量.哪个是无符号类型,足以包含程序中任何对象的大小.上一句中的关键字是无符号的.
在编写时sizeof(int) > -1,C++中的整数提升规则规定关系运算符的两个操作数都将转换为相同的类型(足够大).这是无符号类型.所以-1转换成一些非常大的数字.SIZE_MAX确切地说.直接比较总是评估为假.
但在另一种情况下,您将转换std::size_t为int通过初始化(准确地复制初始化,但它在旁边).sizeof操作符返回的值实际上可能不适合int,在这种情况下,该值不会被保留.但在你的情况下它确实适合(基本类型相当小),并且在比较积极的int反对时得到预期的结果-1.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |