MyClass GlobalVar;
int main()
{
MyClass VarInMain;
}
答案 0 :(得分:20)
有几件事:
答案 1 :(得分:5)
更多差异:
一般情况下,如果没有充分的理由使用全局对象并不是一个好习惯。使用全局变量通常会导致难以维护的代码。
答案 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 它是在所有函数之外声明的变量。整个计划都可以访问。