仅包含编译时常量的类的大小

tjm*_*tjm 3 c++ const

例如,如果我有一个只包含编译时常量的类,

class A {
    static const int x = 1;
    static const int y = 2;
    static const int z = 3;
};
Run Code Online (Sandbox Code Playgroud)

我相信情况是这样的,只要不采用常量的地址,它们就可以(将会)在编译时被替换它们使用它们并且不占用可执行文件中的任何空间(作为常量,显然,数字本身必须出现).如果是这种情况可以/将该类优化出来吗?并且,如果某些东西继承class A自己,但仍然只使用常量并且不使用它们的地址,这会改变吗?

哦,并假设,在非继承版本中,除了作为访问常量的方法之外,该类实际上并未在任何地方使用.

谢谢.

Jam*_*lis 7

这些变量是否是无关紧要的const; 他们是static,所以他们不会影响班级的规模.

sizeof(A)不能为零,所以如果你创建一个实例,A它必须至少有一个字节大小.但是,将A基类作为基类并不一定会增加派生类的大小,因为"基类子对象的大小可能为零"(C++03§1.8/ 5).