具有常量变量的类的多个实例对常量使用相同的内存?

rep*_*ant 4 c++ memory optimization static constants

如果我有一个定义多个常量变量的类,那么......

class SomeClass {
public:
    SomeClass() : SOME_CONSTANT(20), ANOTHER_CONSTANT(45), ANOTHER_CONSTANT2(25), ANOTHER_CONSTANT2(93) { }

private:
    const int SOME_CONSTANT;
    const int ANOTHER_CONSTANT;
    const int ANOTHER_CONSTANT2;
    const int ANOTHER_CONSTANT3;
Run Code Online (Sandbox Code Playgroud)

是否会优化此类的多个实例以指向常量的相同内存?或者我可以通过使每个常量保持静态来节省内存?

Mys*_*ial 5

如果它们不是静态的,那么不,它们将不会被优化.每个实例都有所有常量的空间.(事实上​​,我认为甚至不允许编译器以任何方式组合它们.)

如果确实将它们声明为静态,则它们位于全局内存中,而不是在每个实例中.所以是的,它将使用更少的内存.

编辑:

如果你想让它们成为静态常量,它应该这样做:

class SomeClass {
    public:
        SomeClass(){ }

    private:
        static const int SOME_CONSTANT;
        static const int ANOTHER_CONSTANT;
        static const int ANOTHER_CONSTANT2;
        static const int ANOTHER_CONSTANT3;

};

const int SomeClass::SOME_CONSTANT     = 20;
const int SomeClass::ANOTHER_CONSTANT  = 45;
const int SomeClass::ANOTHER_CONSTANT2 = 25;
const int SomeClass::ANOTHER_CONSTANT3 = 93;
Run Code Online (Sandbox Code Playgroud)