gpt4 book ai didi

c++ - 只有一个没有主体的函数的类的大小

转载 作者:行者123 更新时间:2023-11-30 01:47:36 26 4
gpt4 key购买 nike

<分区>

我被问到一个问题,下面给出的类的大小是多少:

class A
{
void abc();
}

现在,如果我将该函数设为虚拟函数,那么现在的大小是多少

class A
{
virtual void abc();
}

注意:关于visual studio编译器的问题。

我告诉过第一个将有 1 个字节,第二个将有 5 个字节,因为编译器将 V 指针添加到第二个。

我只是在 64 位机器上检查 visual studio 2010:-

第一种情况下类的大小是 1 个字节,第二种情况下是 4 个字节。我也做了一些尝试,发现下面的结果是我提出的问题:

  1. 我发现,如果一个类中只有函数(有或没有主体)而没有数据成员,则类的大小始终为 1 字节,创建的对象也有 1 字节的大小,如下例所示:

    class MyClass
    {
    void abc(){int x=0;}
    int getDouble(int y){return y*2;}
    };
    int main()
    {
    MyClass obj;;
    std::cout<<sizeof(MyClass )<<"\n";
    std::cout<<sizeof(obj)<<"\n";
    int x;
    std::cin>>x;
    }

    输出:

    1
    1

所以在这种情况下,我的问题是成员函数没有任何大小?如果是,编译器如何识别它们?

  1. 据我所知,空类的大小为 1 个字节,但如果我们添加一个数据成员假设 int 大小为 4 字节,类应该为 5 字节但它显示为 4 字节。与仅对虚拟函数进行操作的情况相同,这将添加一个大小为 4 字节的 v 指针,但类的总大小显示为 4 字节。所以在这种情况下,我的问题是,如果一个类本身的大小为 1 字节,并且我们在其中添加任何数据成员,那么最终大小应该是 1 字节 + 数据成员大小?或者类大小将只是所有数据成员的大小(如果它们存在)和 1 个字节(如果它们不存在)? V指针的大小是多少,是4字节吗?

如果我不清楚,请告诉我。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com