一些类型的sizeof()

本文通过C++代码展示了不同类型变量及类的内存占用大小,并演示了有符号与无符号整数比较时可能出现的问题。具体包括基本数据类型、数组、指针、不同类结构的大小,以及比较过程中需要注意的数据类型转换规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>

class A{};
class B{char m_data;};
class C
{
    char m_data[100];
};
class D
{
    char* m_data;
    D() : m_data(new char[100]){}
    ~D()
    {
        delete []m_data;
    }
};
static void testSizeof()
{
    std::cout << "bool sizeof: " << sizeof(bool) <<std::endl;
    std::cout << "char sizeof: " << sizeof(char) <<std::endl;
    std::cout << "int sizeof: " << sizeof(int) <<std::endl;
    char data[10];
    char* pData = data;
    std::cout << "char data[10] sizeof: "<< sizeof(data) << std::endl;
    std::cout << "char* sizeof: " << sizeof(pData) << std::endl;
    std::cout << "A sizeof: " << sizeof(A) << std::endl;
    std::cout << "B sizeof: " << sizeof(B) << std::endl;
    std::cout << "C sizeof: " << sizeof(C) << std::endl;
    std::cout << "D sizeof: " << sizeof(D) << std::endl;
    std::cout << "size_t sizeof: " << sizeof(std::size_t) << std::endl;
}
static void unsignedAndSigned()
{
    std::size_t a = 10;
    int b = -1;
    if(b < a)
        std::cout << "right\n";
    else
        std::cout << "bad\n";
}
int main()
{
    testSizeof();
    unsignedAndSigned();
    return 0;
}

结果:

bool sizeof: 1
char sizeof: 1
int sizeof: 4
char data[10] sizeof: 10
char* sizeof: 4(32位4字节,64位8字节)
A sizeof: 1
B sizeof: 1
C sizeof: 100
D sizeof: 4 (8)
size_t sizeof: 4 (8)
bad

size_t无符号整数

当无符号整数与有符号整数做比较的时候,有符号整数转型为无符号数,然后按照无符号数的规则比较,但是-1会转化为最大的无符号数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值