类内常量

consts inside classes?

本文关键字:常量      更新时间:2023-10-16

嗨,我试图在类中定义一个常量,以正常或通常的方式执行此操作似乎不起作用

class cat
{
public:
    cat();
    ~cat();

private:
    static const int MAX_VALUE = -99999;
    int Number;

public:
    void OrganizeNumbers();
    void SetNumbers();
};

所以我在做一些研究后发现的解决方案是将其声明为 static 但这是什么意思,我也想问一下确实有必要声明一个常量,因为如您所见它是私有的,对吗? 我的意思是它只能通过类方法访问,所以为什么要设置常量,而且我还读到使用 static 只允许您使用 积分类型所以它实际上是一个不知所措的人...如果你想做一个游戏。

static表示成员将在对象的所有实例之间共享。

如果您希望能够在不同的实例中拥有 const 成员的不同值,则需要使用初始化列表在构造函数中设置它的值。

请参阅以下示例:

#include <string>
struct Person {
  Person (std::string const& n) 
    : name (n)
  {
    // doing: 'name = n' here is invalid
  }
  std::string const name;
};

int main (int argc, char *argv[]) {
  Person a ("Santa Claus");
  Person b ("Bunny the Rabbit");
}

延伸阅读

  • [10] 构造函数 - parashift.com/cpp-faq
  • 10.1 构造初始化列表
  • C++中的初始化列表

1(如果你只打算在类的实现中使用MAX_VALUE,则将其声明为"private",如果它是类接口的一部分,则在"public"下声明它。

2(在"C"时代,"静态"用于从外部模块中"隐藏"变量。

在C++下不再需要这样做。

在 C++ 中使用"static"的唯一原因是使成员类范围(而不是每个对象实例(。 这里的情况并非如此 - 您不需要"静态"。

3("常量"对你来说应该足够了。

4(一个

(老式的(替代方案是定义一个C++枚举(而不是"const int"(

这里似乎有一些想法的混乱:

  1. static成员不一定是整体类型,您提到的缺点不存在。
  2. constprivate是不相关的,仅仅因为只能从给定类的实例访问成员,并不意味着没有什么会改变它。

保持恒定正确可防止可能由值意外更改引起的运行时错误。

const您必须使用 :

cat() : MAX_VALUE(-99999) {}

(声明为 const int MAX_VALUE; (