Да, конечно, вы можете инициализировать глобальные переменные. Для встроенных типов вы можете использовать любое значение, которое вы можете использовать для назначения (и вы также можете инициализировать массивы, которые вы не можете назначить). Для типа класса вам решать, какие типы / значения будут разрешены (и / или требуются) при разработке класса. Для предопределенного класса, вы в основном должны обратиться к документации, чтобы выяснить, что он разрешает / требует.
В конечном счете, однако, тот факт, что это глобальное значение, не влияет на значения, которые могут быть предоставлены. Хотя глобальность может повлиять на то, как вы можете получить значение - в частности, вы, очевидно, не можете использовать значения, которые еще не доступны, когда эта инициализация завершена. Это может быть немного более тонким, чем кажется на первый взгляд, потому что очень мало гарантировано порядка, в котором глобальные переменные инициализируются по сравнению друг с другом, например (например), когда выполняется конструктор для вашей глобальной переменной, std::cin
, std::cout
и std::cerr
, возможно, еще не были созданы, поэтому, если вы хотите инициализировать что-либо на основе ввода от пользователя, вам, возможно, придется предпринять специальные шаги, чтобы либо обеспечить порядок инициализации, либо иначе (например) использовать стиль C Ввод / вывод для этой конкретной работы.