Если бы я создал два экземпляра
одного класса Widget, будут оба
экземпляры имеют одну и ту же переменную x?
Да. Это глобальная переменная. Всегда может быть один - на процесс, то есть.
выше поведение то же самое, если
экземпляры класса находятся на том же
нить против разных тем?
Глобальные переменные являются глобальными для процесса (не для потока).
Что если переменная x будет
пользовательский тип вместо встроенного
типа
Не имеет значения. (К счастью, в C ++ есть небольшие различия между встроенными модулями и UDT.)
Когда переменная x будет создана, а когда разрушена?
Создан до вызова main()
, разрушен после. Порядок построения глобалов в нескольких единицах перевода не определен. В том же TU это порядок определения. (Или декларация? Я забыл.) Порядок уничтожения четко определен и, как всегда, порядок построения реверса.
Есть ли какая-либо связь между sizeof (Widget) и такими переменными?
Почему существует связь между классом X
и переменной Y
другого типа?
Какие аспекты определены в стандарте C ++, а какие нет?
По сути, глобальная переменная в безымянном пространстве имен является нормальной глобальной переменной. Только то, что оно находится в пространстве имен со «смешным» именем, которое вы не можете произнести по буквам и которое уникально для его единицы перевода.