«неожиданная» инициализация констант из-за порядка определения

При чтении слайды о constexpr введение посвящено «неожиданно динамической инициализации с константами» . Пример:

struct S {
    static const int c;
};
const int d = 10 * S::c;
const int S::c = 5;

Увы, звуковая дорожка отсутствует, как и ноты, поэтому я могу только догадываться, что здесь имеется в виду.

Верно ли, что d «неожиданно» инициализируется динамически, потому что S :: c определен до d ? Это объявление из S :: c перед d , вероятно, будет недостаточно, компилятору нужно полное определение , верно?

] Тем не менее, я подозреваю, что в следующем примере d будет инициализирован статически?

struct S {
    static const int c;
};
const int S::c = 5;
const int d = 10 * S::c;  // now _after_ defn of S::c

И чтобы взять торт, в C ++ 11, что должно быть constexpr для полной статической инициализации? S :: c , d или оба?

13
задан towi 2 October 2011 в 11:00
поделиться