я пишу программу на С ++ и часть его кода, как показано нижеЧто это означает при объявлении объекта со статическим ключевым словом?
#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;
}
Я думал, что статическое ключевое слово будет сделать его как глобальную переменную, а выход этой программы должна быть
Create
In
Out
Destroy
Но тот факт, что, когда я был скомпилирован с помощью 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 ++, которая outputed
In
Create
Out
Destroy
Итак, почему это происходит? Что это означает при объявлении объекта с статическим ключом?
Скомпилировать с помощью программы на C++ с компилятором C, почему это не сработало? «GCC» - это мультикомпилятор, «gcc» используется для программ C. «g ++» для программы на C++. – Stargateur
локальная статическая переменная имеет статическую продолжительность хранения и не инициализируется до тех пор, пока она не будет достигнута с помощью управления – cshu