c++中如何初始化全局变量?



可以在c++中初始化全局变量吗?如果可能,允许的值是什么?

允许的值取决于变量的类型。对于int, 0或42都可以。对于string,"hello world"可以工作。初始化全局变量和初始化其他变量是一样的,所以你可以自由选择你可以使用的变量。

通常最好保持简单;如果您需要为全局变量设置复杂的初始化项,则变量可能位于错误的位置,但如果需要,您可以做很多事情。

这样做的语法,最基本的是:
int global_Int = 42;
string global_String = "Hello World";

但是,如果在头文件中这样做(因为全局变量通常在通用头文件中声明),您将得到重复的声明和错误。要解决这个问题,可以使用extern关键字声明它们,然后在代码文件中进行初始化:

标题:

extern int global_Int;
extern string global_String;

代码:

#include "header.hpp"
int global_Int = 42;
string global_String = "Hello World";

然后只要在需要使用变量时包含标题即可。您还可以根据需要添加其他关键字(例如,如果您需要const globals)。

是的,你当然可以初始化全局变量。对于内置类型,可以使用任何可以用于赋值的值(也可以初始化不能赋值的数组)。对于类类型,在设计类时由您决定允许(和/或需要)哪些类型/值。对于预定义的类,您基本上必须查阅文档来弄清楚它允许/需要什么。

然而,最终,它是全局变量这一事实并不影响可以提供的值。作为一个全局变量会影响你获取值的方式——特别是,你显然不能使用在初始化完成时还不可用的值。这可能比最初看起来更微妙,因为很少有关于全局变量初始化顺序的保证,所以(例如)当你的全局变量的构造函数执行时,std::cin, std::coutstd::cerr可能还没有被构造,所以如果你想根据用户的输入初始化一些东西,您可能需要采取特殊的步骤来确保初始化的顺序,或者(例如)为特定的作业使用c风格的I/O。

当然可以。为什么我们不能?

//global variables
int g_int = 100;
int g_float = 10.0;
int g_char = 'A';
class X 
{
   int value;
   public:
      X(int v) : value(v){}
};
X g_x1(10);  //initialize with argument 10
X g_x2 = X(198); //with arg 198
int main()
{
}

几乎可以是任何东西,如构造函数调用:

static const std::string boo( "42" );

要小心-这些在main()之前运行,但是它们的顺序是未定义的(参见"静态初始化顺序惨败")。

相关内容

  • 没有找到相关文章

最新更新