Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是不是;“静态”;这些例子中的关键字有什么不同?_C++_Class_Static_Member - Fatal编程技术网

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