我们可以在 C++ 中有一个静态类吗?

Posted

技术标签:

【中文标题】我们可以在 C++ 中有一个静态类吗?【英文标题】:Can we have a static class in C++? 【发布时间】:2013-01-30 06:36:02 【问题描述】:

我只是想知道我们是否可以在 C++ 中使用静态类。我的意思是我们可以像static class foo 那样在 C++ 中将一个类声明为静态类吗?我知道我们可以在 C++ 中使用静态成员变量和静态成员函数,但我不确定静态类。

编辑:

我想问一个类是静态的意味着什么。

【问题讨论】:

在您看来,静态类意味着什么? 你在找单身人士吗? 您在寻找类似namespace 的东西吗? 该死的接近这个问题:***.com/questions/12436511/… 这个问题不清楚实际上是我的坏事(我想这就是它被否决的原因)。我实际上是在寻找一个类是静态的意味着什么。我知道静态变量只能实例化一次。静态方法也是如此,它们不属于类的特定实例。下次我会尝试更清楚和具体。 【参考方案1】:

static 是一个存储类说明符。

应用于变量,它指定对象的生命周期可见性——在这种情况下,生命周期是整个程序的执行,可见性仅限于特定的翻译单元(通常是给定的源文件)。 应用于函数,它同样指定对象的可见性 -- 仅限于定义它的特定翻译单元。 应用于类成员变量和函数,它将变量定义为类的属性,而不是对象本身。

这就是半迂腐的定义。问题是,您希望将什么语义附加到“静态类”的概念上?嵌套类自动具有类似静态的属性——它们是类的属性,而不是单个对象。如果您想要在外部范围内声明的类的类静态属性(即不与跨不同翻译单元的单一定义规则冲突),您可以使用anonymous namespace。

【讨论】:

我可以看出该声明有两点错误。首先,函数不是“存储”,但它可以是静态的。其次,有些东西占用空间而不是存储。 这引出了一个问题......谁是支持该声明的 5 个人? @thang:嗯,很好。为完整性而编辑。【参考方案2】:

static 关键字意味着它所引用的对象在整个程序的生命周期中都存在。类定义只是构造对象的大纲。

考虑到这一点,也许您可​​能希望创建一个命名空间或创建一个singleton object,这是一个设计为只有一个实例的类。

【讨论】:

谢谢!这正是我一直在寻找的。 :)【参考方案3】:

不,但是如果您创建一个仅使用静态方法(和数据)的类,您基本上可以实现几乎相同的效果。请注意,C++ 中没有静态构造函数的概念。

【讨论】:

您还想将构造函数设为private【参考方案4】:

如果你所说的“静态类”指的是 C# 中的类,那么 C++ 中的等价物就是只创建一个构造函数并将其设为私有,并避免创建非静态成员。

如果“静态类”指的是 Java 中的类,那么所有 C++ 类都是“静态的”,因此不能添加“静态”,因为它是多余的。

【讨论】:

以上是关于我们可以在 C++ 中有一个静态类吗?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中有标准的日期/时间类吗?

你能在 C++ 中保护嵌套类吗?

静态内部类的序列化

通过调用 C++ 中的静态类函数初始化全局静态变量

在 C++ 中,如何从另一个类中获取静态函数

C++模版类实现普通类静态顺序表