При чтении слайды о 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
или оба?