我们可以在 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++ 中有一个静态类吗?的主要内容,如果未能解决你的问题,请参考以下文章