这些示例中的 "static" 关键字是否有所作为?
Does the "static" keyword in these examples make a difference?
我刚刚意识到我不必要地将类成员静态化。我想知道这是否有意义,或者它们之间有什么区别。所以我有:
struct Log
{
int a;
std::string text;
};
struct GUI
{
GUI() = delete;
static void doSomething() {}
static inline int a;
static inline Foo fooObj;
};
或
struct GUI2
{
GUI2() = delete;
static void doSomething() {}
int a;
Foo fooObj;
};
所以你可以看到这个 GUI 类总是会用范围运算符 GUI:: 而不是点成员运算符来访问,我不会创建它的任何实例,它是完全静态的。因此,两个 GUI 类中的 int 和 Foo 对象要么具有"static"关键字,要么没有。在 GUI 类不会被实例化的情况下,我认为这不会有什么不同。作为最佳实践,省略静态关键字是否更好?另外,如果两者之间有任何区别怎么办?我只是注意到我认为这对我的情况没有区别。
struct GUI2
{
GUI2() = delete;
static void doSomething() {}
int a;
Foo fooObj;
};
int main() {
GUI2::a = 0; // error
}
如果GUI2::a
不是静态成员,则它仅存在于GUI
对象中。这意味着无法使用GUI2::a
访问它,因为没有a
实例附加到类。您需要一个实例:
GUI2 gui;
gui.a = 0; // OK
如果GUI2::a
是静态成员,则它与对象分离并独立存在(并且必须与某处int GUI::a;
一起定义(:
GUI2::A = 0; // OK
这些示例中的"静态"关键字是否有区别?
是的,确实如此。
相关文章:
- 这些示例中的 "static" 关键字是否有所作为?
- 为什么静态成员函数定义不能有关键字"static"?
- C++不使用"inline"或"static"无类函数的关键字时出现重定义链接错误
- 使用 static 关键字禁止使用堆栈内存
- 二元运算符声明的'static'关键字
- static关键字是否影响作用域
- 关键字 static 在 C 和 C++ 之间有什么区别?
- static关键字在类内部和类外部
- 为什么 C++ 不接受函数定义中的 static 关键字
- c++static关键字对大括号有什么作用
- static 关键字是否在 C/C++ 和存储级别中起作用?
- const/static关键字是否在变量声明中传播
- 不能对 c++ 类实现文件中的静态方法使用 "static" 关键字 (.cpp)
- 何时应在非成员函数之前编写关键字 'static'?
- 如何在c++中使用class中的static关键字来模拟Python中@classmethod的行为
- 为什么不允许将类成员定义的' static '关键字放在命名空间范围内?
- 为什么在这个模板代码中需要static关键字?
- 如果我们在c++中使用static关键字删除[-Wreturn local-addr](警告:返回本地变量的地址),可以
- 我可以使用static关键字只分配一次新内存吗
- "static"关键字与类的变量、函数和对象等有什么用?