类中的成员变量C++对于该类的所有对象始终是常量

Member variable in C++ class that is always constant for all objects of that class?

本文关键字:对象 常量 于该类 成员 变量 C++      更新时间:2023-10-16

我正在构造一个类,其中我有三个成员变量,无论如何,我希望它们始终是相同的值。

我有

class foo{
public:
    double var_1, var_2, var_3;
    double x=1, y=2, z=3;
[functions go here]
};

这给了我一个错误,因为我无法初始化这样的变量。但我希望 x、y 和 z 始终分别为 1、2 和 3。我尝试在类外定义它们,但这不起作用,因为我希望它们成为类的成员变量。

我该怎么做?

使这些值对于类来说是静态的,这样所有对象都将继承这些相同的值。

static const int x = 1;
static const int y = 2;
static const int z = 3;

从技术上讲,这并不定义变量。如果静态数据成员是 const 整型或 const 枚举类型,则可以在静态数据成员的声明中指定常量初始值设定项。此常量初始值设定项必须是整数常量表达式。请注意,常量初始值设定项不是定义。您仍然需要在封闭命名空间中定义静态成员。

#include "foo.h"
#include <//libs....>
int foo::x;
int foo::y;
int foo::z;
//class functions down below

还可以使用构造函数中的初始值设定项列表来设置这些字段的初始值,就像任何其他成员一样:

class foo {
public:
    const double x;
    const double y;
    const double z;
    foo() : x(1), y(2), z(3) {
    }
};

不必将它们设为静态。您可以像这样声明它们:

class foo{
public:
    double var_1, var_2, var_3;
    const double x=1.0;
    const double y=2.0;
    const double z=3.0;
[functions go here]
};

虽然如果它们是整数值,那么将它们声明为 int s 会更好。