C++ 是不是;“静态”;这些例子中的关键字有什么不同?
我刚刚意识到我不必要地将一个类成员设置为静态。我想知道这是否有意义,或者它们之间有什么区别。因此,我:C++ 是不是;“静态”;这些例子中的关键字有什么不同?,c++,class,static,member,C++,Class,Static,Member,我刚刚意识到我不必要地将一个类成员设置为静态。我想知道这是否有意义,或者它们之间有什么区别。因此,我: struct Log { int a; std::string text; }; struct GUI { GUI() = delete; static void doSomething() {} static inline int a; static inline Foo fooObj; }; 或 所以您可以看到,这个GUI类总是使用sco
struct Log
{
int a;
std::string text;
};
struct GUI
{
GUI() = delete;
static void doSomething() {}
static inline int a;
static inline Foo fooObj;
};
或
所以您可以看到,这个GUI类总是使用scope操作符GUI::而不是dot member操作符来访问,我不会创建它的任何实例,它是完全静态的。因此,两个GUI类中的int和Foo对象要么有“static”关键字,要么没有。在GUI类不会被实例化的情况下,我不相信这会有什么不同。作为一种最佳实践,是否最好不使用static关键字?还有,如果两者之间有什么不同呢?我只是注意到我觉得这对我来说没什么区别
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;
在某处定义):
这些例子中的“static”关键字有区别吗
是的,是这样。@Ron我把GUI类中的Foo和int成员对象设为静态的,当GUI本身是静态类时,在这种情况下是静态的吗?有什么不同吗?C++中没有静态类的东西。如果你不想创建它的任何实例,为什么要把它变成一个类?只需使用名称空间。@CodingLumis它为我提供访问说明符,并且。。。我不记得还有什么,我抛出了是使用名称空间还是类,我决定使用类。啊,我感到困惑,当然这会有所不同。我花了很长时间离开,忘记了规则。我确实需要使它静止。
GUI2 gui;
gui.a = 0; // OK
GUI2::A = 0; // OK