Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.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
当用static关键字声明对象时,它意味着什么? 我写了一个C++程序,代码的一部分就像下面的< /P> #include <cstdio> class A { public: A() { puts("Create"); } ~A() { puts("Destroy"); } }; void Test() { puts("In"); static A a; //declare an object with static keyword. } int main() { Test(); puts("Out"); return 0; }_C++ - Fatal编程技术网

当用static关键字声明对象时,它意味着什么? 我写了一个C++程序,代码的一部分就像下面的< /P> #include <cstdio> class A { public: A() { puts("Create"); } ~A() { puts("Destroy"); } }; void Test() { puts("In"); static A a; //declare an object with static keyword. } int main() { Test(); puts("Out"); return 0; }

当用static关键字声明对象时,它意味着什么? 我写了一个C++程序,代码的一部分就像下面的< /P> #include <cstdio> class A { public: A() { puts("Create"); } ~A() { puts("Destroy"); } }; void Test() { puts("In"); static A a; //declare an object with static keyword. } int main() { Test(); puts("Out"); return 0; },c++,C++,但事实是,当我使用GCC编译它时,我得到了一些链接器错误 /tmp/cc1JwaFb.o: In function `Test()': test.cpp:(.text+0x23): undefined reference to `__cxa_guard_acquire' test.cpp:(.text+0x46): undefined reference to `__cxa_guard_release' test.cpp:(.text+0x6e): undefined reference to

但事实是,当我使用GCC编译它时,我得到了一些链接器错误

/tmp/cc1JwaFb.o: In function `Test()':
test.cpp:(.text+0x23): undefined reference to `__cxa_guard_acquire'
test.cpp:(.text+0x46): undefined reference to `__cxa_guard_release'
test.cpp:(.text+0x6e): undefined reference to `__cxa_guard_abort'
/tmp/cc1JwaFb.o:(.eh_frame+0x6b): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status
但是我可以用G++编译它,它输出

In
Create
Out
Destroy

那么,为什么会发生这种情况呢?使用static关键字声明对象时意味着什么?

这里发生的是第一次执行到static;行A已创建。这发生在putsIn之后;因此,输出的顺序是正确的

到目前为止,一切都与非静态变量相同。在您的示例中,您仍然可以看到变量是静态的,因为Out是在静态变量的销毁生存期=程序生存期之前打印的。但静态变量的另一个属性没有显示在示例中。请尝试以下主要步骤:

int main()
{
    Test();
    Test();
    puts("Out");
    return 0;
}
输出为:

In
Create
In
Out
Destroy
您可以在这里看到,Create只打印了一次。静态变量就是这样做的——当执行第一次到达声明时,它只初始化一次


希望这有助于

我用C编译器编译C++程序,为什么它不起作用?GCC是一个多编译器,GCC用于C程序。g++用于C++程序。本地静态变量具有静态存储持续时间,并且直到控件达到为止才初始化。
In
Create
In
Out
Destroy