全局变量和主要变量之间有什么区别?

时间:2009-05-06 16:25:12

标签: c++

MyClass GlobalVar;

int main()
{
    MyClass VarInMain;
}

12 个答案:

答案 0 :(得分:20)

有几件事:

  1. 通常,它们分配在不同的地方。局部变量在堆栈上分配,全局变量在其他地方分配。
  2. main中的局部变量仅在main中可见。另一方面,可以在任何地方访问全局变量。

答案 1 :(得分:5)

更多差异:

  1. 如果全局对象的构造函数/析构函数抛出异常,则调用函数terminate并且没有机会继续。对于本地对象,您可以捕获异常并执行某些操作(但是从析构函数中抛出它仍然很棘手)。
  2. 没有明确规定构建/销毁全局对象的顺序。这意味着,通常对于两个全局对象,你不能说,首先构造哪一个。另一方面,本地对象在定义点创建,在块结束时被破坏,以便与创建顺序相反。
  3. 范围......(已提及)
  4. 一般情况下,如果没有充分的理由使用全局对象并不是一个好习惯。使用全局变量通常会导致难以维护的代码。

答案 2 :(得分:3)

变量VarInMain是一个局部变量,只能在声明它的函数内部使用,在本例中是主函数。 GlobalVar可用于程序的每个函数,因为它是在函数之外声明的。这称为范围。

答案 3 :(得分:3)

范围。 VarInMain只能通过main中的代码直接访问。可以通过文件中任何函数中的代码直接访问GlobalVar。

答案 4 :(得分:3)

一个简单的例子:

int y = 43;

void foo() {
  // y is visible here, x is not
}

int main() {
  int x = 42;
  foo(); // x is visible here, but not when we enter the foo() function

}

全局变量在所有函数中全局可见。 局部变量在仅声明它的范围内可见。如果你在main中声明一个局部变量,它将在那里可见,是的,但是在从main调用的函数中不可见。

答案 5 :(得分:1)

VarInMain只能在main()函数中访问。如果main()调用另一个函数,则该函数将无法访问它。这是功能范围

可以在同一文件中的每个函数中访问

GlobalVar。如果将extern MyClass GlobalVar;放在标题中,则可以在具有或包含该声明的文件中的任何函数中使用它。这是全球范围

答案 6 :(得分:1)

另一个不同之处:全局对象启动的顺序未定义。 例如:

static Integer Global_Integer(5);
static Foo Global_Foo;

由于这些是对象,C ++运行时会在初始化它们时调用它们的构造函数,但是我们无法预测它将发生的顺序。

答案 7 :(得分:1)

另一个区别: 全局变量将在程序启动之前初始化(即调用main()),而局部变量在执行到达该点时初始化(即在上面的示例中调用main之后)。

答案 8 :(得分:0)

globals可以在main之外声明的函数中使用,而在main中声明的任何东西都必须首先传递给另一个函数。

答案 9 :(得分:0)

另一个:全局变量(或任何其他名称空间中的变量)被初始化为(T)0,其中T是变量的类型(如果它是一个简单的非类型类型),数组和类的初始化类似于所有元素。

但是在我看来,无论如何都明确地初始化事物是个好主意,而不是依赖于零初始化,因为它在明确提到初始值时提高了程序的可读性。然而,知道何时阅读别人的代码仍然很有用,始终牢记编译器会自动初始化它们。

未声明为static的局部变量不会自动初始化。因此,如果T没有构造函数为您执行此操作,则必须自行执行任何初始化。始终牢记这一点。

答案 10 :(得分:0)

任何函数都可以访问全局变量。 main中的变量与任何其他局部变量完全相同,只能访问main中的代码。 此外,如果main(或其他函数)调用自身,则将复制局部变量,但不会复制全局变量。

int x = 0;
void myfunction()
{
    x++;
    printf("%i ",x);
}
int main()
{
    myfunction();
    myfunction();
}

此示例将输出:     1     2

移动“int x = 0;”进入myfunction会输出:     1     1

因为每次调用myfunction时都会初始化局部变量。

答案 11 :(得分:0)

LOCAL VARIABLE 它是在函数内或块内声明的变量。它只能在声明它的函数/块中访问。

GLOBAL VARIABLE 它是在所有函数之外声明的变量。整个计划都可以访问。