C++ 常量和静态常量的区别是什么?

C++ 常量和静态常量的区别是什么?,c++,C++,以下陈述均有效: static const A = 2; const B = 3; 声明第一个或第二个的区别是什么?静态意味着整个类只共享一个常量,而非静态意味着类的每个实例都单独拥有该常量 例如: class A{ static const a; const b; } //Some other place: A m; A n; 对象m和n具有相同的a,但不同的b。如果要在类内声明static常量,则它可以从类和该类的任何实例访问,因此所有对象都将共享相同的值;并且const本身对于

以下陈述均有效:

static const A = 2;
const B = 3;

声明第一个或第二个的区别是什么?

静态意味着整个类只共享一个常量,而非静态意味着类的每个实例都单独拥有该常量

例如:

class A{

static const a;
const b; 
}

//Some other place:

A m;
A n;

对象m和n具有相同的a,但不同的b。

如果要在类内声明
static
常量,则它可以从类和该类的任何实例访问,因此所有对象都将共享相同的值;并且const本身对于类的每个实例都是独占的

鉴于班级:

class MyClass {
    public:
        static const int A = 2;
        const int B = 4;
};
您可以这样做:

int main() {
    printf("%d", MyClass::A);

    /* Would be the same as */

    MyClass obj;
    printf("%d", obj.A);

    /* And this would be illegal */
    printf("%d", MyClass::B);
}

看看。

这里已经回答了:很可能是你写这篇文章时出现的一些问题回答了你的问题。@yu hao Nope@伙计们!要跟随的两个重复都已标记!!事实上存在需要解释的差异;投票决定重新开放。更合适的复制品。@vin%c3%adcius-gobbo-a-de-oliveira您应该澄清这些代码段的范围。新代码的不必要用法是什么?在
obj
中访问
A
也不是这样的。很抱歉,我搞砸了,让我来解决这个问题。@Rapptz很抱歉,我把您的注释与静态字段混淆了。它仍然无法编译。删除不必要和错误的
新建
@LightnessRacesinOrbit抱歉,已经完成。我也错过了
int