Инициализация константных переменных - PullRequest
2 голосов
/ 06 октября 2010

У меня есть такой код:

bool doSomething()
{ 
  std::cout << "I'm here!"
  return true;
}
const bool x = doSomething();

Если поместить в cpp-файл в моем консольном приложении Visual C ++, код выполняется, как и ожидалось, до ввода метода main ().

Однако, если я помещу этот код в .cpp-файл внутри проекта библиотеки статических ссылок (который связан с моим консольным приложением), код никогда не будет выполнен. Я не определяю какие-либо методы в этом файле, которые используются извне, нет соответствующего .h-файла. Так возможно ли, что компоновщик не связывает файл? Как я могу избежать этого?

(На самом деле код выполняется, если я создаю заголовочный файл для файла cpp, помещаю другой метод "void dummy () {}" в файл cpp- и h и вызываю dummy () из main.)

Большое спасибо!

Ответы [ 2 ]

5 голосов
/ 06 октября 2010

Это должно все исправить.

$ 3.6.2 / 4- "Это определяется реализацией ли динамическая инициализация нелокальной переменная со статической продолжительностью хранения делается до первого утверждения главный. Если инициализация отложено до некоторого момента времени после первое изложение основного, оно должно произойдет до первого использования любого функция или переменная, определенная в та же единица перевода как переменная быть инициализированным. 34 "

1 голос
/ 06 октября 2010

Когда код находится в статической библиотеке, компоновщик связывает его, только если он действительно используется. Это уменьшает размер вашего двоичного файла.

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