У меня есть библиотека stati c, которая имеет глобальную переменную stati c для внутренней связи.
В библиотеке. cpp
#include "library1.h"
static library1 __internalUsage;
library1::library1()
{
std::cout << "some side effect";
}
И main. cpp, Я условно создаю объект library1 в соответствии с условием времени выполнения
В main. cpp
#include "library1"
int main()
{
...
if (someCondition)
library1 test;
...
}
Я думаю, что в зависимости от условия некоторые из модулей компиляции библиотеки могут никогда не использоваться так что переменную stati c в этом модуле компиляции не нужно создавать. Но в настоящее время я не могу контролировать это во время выполнения. Если я удаляю код с помощью library1, я показал, что переменная stati c никогда не будет создана, даже если я включил заголовок библиотеки. Я думаю, это из-за оптимизации компилятора.
Итак, мои вопросы
Могу ли я контролировать это во время выполнения?
Согласно Stati c инициализаторы неиспользуемого глобального stati c объекта с побочным эффектом не могут быть "устранены, даже если он не используется". Но, как я упоминал выше, если я удаляю весь код с использованием library1 в основном, компилятор не создал объект stati c. Что здесь происходит?