c++ - sizeof() 是否显示 C++ 类开销?

标签 c++

#include <iostream>
using namespace std;

class Test {
    int a;
public:
    int getA() {
        return a;
    }

Test(): a(1){}
Test(int i): a(i){}

};



int main() {
    Test t1(100);
    cout << sizeof(t1) << " " << sizeof(1) << endl; // 4 4
    return 0;
}

似乎c++中的类根本没有开销。 t1 的大小为 4,就像一个整数。如果我向 Test 添加另一个 int 成员,它的大小将增加到 8。

我本以为会大于 4

类真的没有开销吗?

最佳答案

It seems that classes in c++ have no overhead at all.

只要一个类没有虚函数,那么,是的。您期望什么样的开销?无虚拟类仅仅是变量的集合,具有一组与类型关联的函数。

class Foo {
    int a;
    int bar() const { return a*a; }
};

可以简单地替换为

struct Foo {
    int a;
}

int Foo_bar(Foo const *that) {
    return (that->a) * (that->a);
}

如果您编译了每个片段,您会发现汇编代码看起来几乎完全相同。


但是,如果您添加一个虚拟函数,游戏就会发生巨大变化。

关于c++ - sizeof() 是否显示 C++ 类开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13230973/

相关文章:

c++ - 当给定相同的字符串输入时, `std::atof` 是否保证产生相同的输出?

c++ - 跳过回溯中最内层的帧

c++ - Visual Studio C++ - 如何避免 Visual C++ Redistributable Packages?

c++ - return *this 后调用的析构函数

c++ - 在 MFC 中更改按钮的光标

c++ - 如何在 Mac OSX El Capitan 上替换 boost/thread/tss.hpp?

c++ - C++ 语法解释中的赋值运算符重载

c++ - 如何检测一个类是否在 C++ 中具有隐式构造函数和原始成员?

c++ - 将 g++ 代码翻译成 clion 环境

c# - 如何从 C++ 调用 C#