为什么最后一行的sizeof c = 10?

问题描述 投票:0回答:1
#include <iostream>
using namespace std;
    
int main()
{
    short a = 1000;
    int b = 10000;
    long double c = 5.560000505012;
    
    cout << sizeof(c) - sizeof(b) << "\n"; // 12 ===> Tmam
    cout << sizeof(c) + sizeof(b) << "\n"; // 20 ===> Tmam
    cout << sizeof(a) * sizeof(c) << "\n"; // 32 ===> Tmam
    cout << a * (int)c << "\n"; // 5000
    
    cout << char( sizeof(c) * int(c) ) << "\n";
}

sizeof(c)
除了最后一行是 10 之外,每一行都是 16。为什么?

c++
1个回答
0
投票

您提出的问题无法得到解答。它基于一个错误的前提。最后一行中

sizeof(c)
的值与上面几行中的值相同。因此,最后一行没有理由不同。
sizeof(c)
是编译时常量。它无法改变。

让我们重新表述一下这个问题:“最后一行发生了什么?”

坦率地说,我不明白你为什么打印前几行,但不明白你需要理解最后一行。打印子表达式:

#include <iostream>
    
int main()
{        
    // Do Not Edit Here
    short a = 1000;
    int b = 10000;
    long double c = 5.560000505012;
    
    std::cout << sizeof(c) << "\n";
    std::cout << int(c) << "\n";
    std::cout << sizeof(c) * int(c) << "\n";
    std::cout << char( sizeof(c) * int(c) ) << "\n";
}

可能的输出是(可能会不同,因为

long double
的宽度不固定,只固定了最小宽度,可以更宽):

16
5
80
P

sizeof(c)
看起来是
16
c
截断为
int
计算结果为
5
。他们的乘积是
80
并且在使用的字符编码
80
中会导致当
P
将该值通过管道传输到
char
时打印
std::cout

不涉及

10

© www.soinside.com 2019 - 2024. All rights reserved.