Вы неправильно используете оператор const_cast, что, к сожалению, возможно, и в этом случае генерирует неопределенное поведение ... Вы можете использовать динамический инициализатор для constBigLut
, вызывая его неявный конструктор копирования (предполагая, что boost::array
- это то же понятие, что и std::array
):
struct bigLut_tinit {
bigLut_t BigLut;
bigLut_tinit() {
for(int i = 0; i < 100000; ++i) {
BigLut[i] = i;
}
}
};
const bigLut_tinit constBigLut;
Редактировать: похоже, что VC ++ 10 отлично применяет RVO, так что временный объект непосредственно перемещается в объект статической длительности. Так что имхо не нужно объявлять локальную статику или ссылки на библиотеки ...
Редактировать 2: Да, я пропустил вопрос размера. Рекомендовать перенос в нетривиальный тип с помощью конструктора, как указано выше ...