При чтении слайдов о constexpr введение посвящено "неожиданно динамической инициализации с помощью consts". Пример:
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
И чтобы взять торт, в С++ 11, , что должно быть constexpr
для полной статической инициализации? S::c
, d
или оба?