今天,我发现自己创建了一个 2 个 int 的静态数组,并且由于 C++(不是 C++11)中不允许其内联初始化,因此我恢复使用 struct 类型的静态变量。
class MyWidget {
...
static const struct Margin {
const int horizontal = 1;
const int vertical = 1;
} margin;
};
我注意到内部变量对于 struct Margin 的所有实例仅使用一次,因此我决定也将它们设为静态。
class MyWidget {
...
static const struct Margin {
static const int horizontal = 1;
static const int vertical = 1;
} margin;
};
让我感到奇怪的是声明静态结构变量与声明具有静态成员的静态结构变量之间的区别。 AFAC 静态对象在内存中仅分配一次,因此无论我的成员是否是静态的,Margin 结构都将仅分配一次。
我错过了什么吗?是否存在差异或者仅仅是语法糖?
您似乎对“静态结构”有点困惑,因为在 C++ 中,不存在静态结构之类的东西(与 C# 等语言相反,在 C# 中,静态类是解决没有全局函数这一事实的解决方法)。
您正在做的就是创建该类的实例,然后使instance (margin
)静态(且恒定)。所以你的结构不是静态的,你只是定义一个结构,然后创建一个static const
它的实例,属于MyWidget
。现在给出的两个示例之间的差异应该非常明显。
在第一个示例中,您正在创建一个名为 margin 的静态变量,属于MyWidget
,这意味着您可以访问horizontal
会员这样
MyWidget::margin.horizontal
Where margin
是您创建的实例。
然而,如果您将结构体的成员设为静态,您将无法做到这一点。相反,您必须像这样访问它们:
MyWidget::Margin::horizontal
Where Margin
is the struct
。但请注意,在第二种情况下,不需要静态实例margin
,因为它没有与之关联的实例字段。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)