gpt4 book ai didi

c++ - 具有静态成员的静态结构

转载 作者:可可西里 更新时间:2023-11-01 17:09:05 25 4
gpt4 key购买 nike

今天我发现自己创建了一个包含 2 个整数的静态数组,并且因为 C++(不是 C++11)不允许其内联初始化,所以我转而使用结构类型的静态变量。

class MyWidget {
...
static const struct Margin {
const int horizontal = 1;
const int vertical = 1;
} margin;

};

我注意到内部变量只对 Margin 结构的所有实例使用一次,所以我决定也将它们设为静态。

class MyWidget {
...
static const struct Margin {
static const int horizontal = 1;
static const int vertical = 1;
} margin;

};

令我感到奇怪的是声明静态结构变量与声明具有静态成员的静态结构变量之间的区别。 AFAC 静态对象在内存中只分配一次,因此无论我的成员是否是静态的,Margin 结构将只分配一次。

我错过了什么吗?是否存在差异,还是仅仅是语法糖?

最佳答案

您似乎对“静态结构”有点困惑,因为在 C++ 中,没有静态结构这样的东西(与 C# 等语言相反,在 C# 中静态类是解决没有全局函数)。

您正在做的是创建该类的一个实例,并使实例(margin)成为静态的(和常量)。所以你的结构不是静态的,你只是定义一个结构,并创建它的一个 static const 实例,属于 MyWidget。现在给出的两个示例之间的区别应该是非常明显的。

在第一个示例中,您正在创建一个名为 margin 的静态变量,它属于 MyWidget,这意味着您可以像这样访问 horizo​​ntal 成员

MyWidget::margin.horizontal

margin 是您创建的实例。

然而,如果您将结构的成员设为静态,您将无法做到这一点。相反,您必须像这样访问它们:

MyWidget::Margin::horizontal

其中 Marginstruct。但是请注意,在第二种情况下,不需要静态实例 margin,因为它没有与之关联的实例字段。

关于c++ - 具有静态成员的静态结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14976971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com