什么时候非静态const数据成员比const静态成员更有用?

时间:2014-04-13 09:41:19

标签: c++ static const

在C ++中,有静态和非静态const数据成员。 当我想要一个常量时,我​​总是将它设为static,因为如果无法修改项目,则拥有多个副本(每个类的一个实例一个)是没有意义的。我想知道为什么会有非静态const成员?

2 个答案:

答案 0 :(得分:4)

class MyClass
{
    public:
       MyClass(int val): myVal(val) {}
       const int myVal;
};

在这个小例子中,没有getter方法的每个人都可以读取myVal,但是只要MyClass被实例化,它就无法修改。

如果您想确保以后不修改数据类型,则只需将数据类型声明为const

由于myVal不是static,因此MyClass的每个不同实例都可以使用不同的值。如果myValstatic,则每个实例的值都相同,并且构造函数不能赋值。

采取以下示例

#include <iostream>
using namespace std;

class MyClass
{
    public:
        MyClass(int val) : myConst(val) {}
        void printVars() {
            cout << "myStatic " << myStatic << endl;
            cout << "myConst " << myConst << endl;
        }

        static const int myStatic;
        const int myConst;
};

const int MyClass::myStatic = 5; //Note how this works without 
                                 //an instance of MyClass

int main()
{
    MyClass ca(23);
    MyClass cb(42);
    cout << "ca: " << endl;
    ca.printVars();
    cout << "cb: " << endl;
    cb.printVars();
    return 0;
}

结果:

ca: 
myStatic 5
myConst 23
cb: 
myStatic 5
myConst 42

以下会导致编译错误,因为变量是const:

ca.myConst = 11;
ca.myStatic = 13;

答案 1 :(得分:3)

  1. static const适用于班级
  2. const适用于对象
  3. E.g。

    class Verticies {
        public:
           const int colour;
           static const int MAX_VERTICIES = 100;
           Point points[MAX_VERTICIES];
           Verticies(int c) : colour(c) { }
           // Etc
    };
    

    此处MAX_VERTICIES适用于Verticies类型的所有对象。但是不同的物体可以有不同的颜色,并且颜色在结构上固定

相关问题