Условно создайте глобальный объект с внутренней связью в зависимости от того, используется модуль компиляции или нет - PullRequest
0 голосов
/ 06 января 2020

У меня есть библиотека 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 никогда не будет создана, даже если я включил заголовок библиотеки. Я думаю, это из-за оптимизации компилятора.

Итак, мои вопросы

  1. Могу ли я контролировать это во время выполнения?

  2. Согласно Stati c инициализаторы неиспользуемого глобального stati c объекта с побочным эффектом не могут быть "устранены, даже если он не используется". Но, как я упоминал выше, если я удаляю весь код с использованием library1 в основном, компилятор не создал объект stati c. Что здесь происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...