Пример: однажды я попытался связать нативную библиотеку C ++ с приложением C ++ / CLI. Эта библиотека содержала const static std::string
. Приложение всегда зависало. Причина:
Когда приложение запускается, оно инициализирует постоянные статические объекты. Чтобы убедиться, что статические объекты удаляются должным образом при выходе из приложения, компилятор генерирует вызов стандартной библиотечной функции atexit . Этот вызов вызывает сбой в собственной среде выполнения C, которая еще не инициализирована должным образом на данный момент.
Нет проблем с неконстантными статическими полями, которые инициализируются позже.
Я считаю, что это ошибка - может быть, она исправлена тем временем (у меня была проблема с Visual Studio 2005). К сожалению, я не могу предоставить подходящую ссылку, но надеюсь, что это поможет вам в дальнейших исследованиях.