C++ 内部的变量会发生什么变化?

C++ 内部的变量会发生什么变化?,c++,C++,函数中的变量会发生什么变化 void function() { int a = 5; a += a; //a contain 10 } int main() { function(); return 0; } 那么,在函数(function())执行完成后,这里发生了什么呢?这个变量(a)是否仍然存在于内存中(使用内存),其最后一个值是(10),或者它已完全销毁,不再存在于内存中?它通常存储在堆栈中,也就是说,它是自动分配的,这些自动分配的内存在每次函数调用中都会被回

函数中的变量会发生什么变化

void function()
{
   int a = 5;
   a += a; //a contain 10
}

int main()
{
   function();
   return 0;
}
那么,在函数(function())执行完成后,这里发生了什么呢?这个变量(a)是否仍然存在于内存中(使用内存),其最后一个值是(10),或者它已完全销毁,不再存在于内存中?

它通常存储在堆栈中,也就是说,它是自动分配的,这些自动分配的内存在每次函数调用中都会被回收。您的编译器可能会认为这个变量实际上是无用的,并完全忽略它,因为它从未使用过,也不会影响代码的任何其他部分,所以可能发生的情况是:什么都没有

在C++和C++中,重要的是要记住,局部变量之间存在巨大的差异,这些变量被认为是自动分配的,并且只要函数执行,它们就只能生存。并通过指针和
new
动态分配,直到它们被
delete
删除或程序终止为止。

它通常存储在堆栈上,也就是说,它是自动分配的,这些自动分配的内存在每次函数调用中都会被回收。您的编译器可能会认为这个变量实际上是无用的,并完全忽略它,因为它从未使用过,也不会影响代码的任何其他部分,所以可能发生的情况是:什么都没有


在C++和C++中,重要的是要记住,局部变量之间存在巨大的差异,这些变量被认为是自动分配的,并且只要函数执行,它们就只能生存。并通过指针和
new
动态分配,直到它们被
delete
删除或程序终止为止。

未真正指定。我将首先描述这个幼稚的案例,然后解释为什么它可能并不真正适用

天真地说,存储在中的内存
a
仍然存在,尽管名称
a
函数
之外不再可访问。内存可能包含也可能不包含
10
-编译器可以随意覆盖它,也可以不费事。显然,它也可以在以后的任何时候作为其他东西重复使用

如果
a
确实是在内存中分配的,那么它可能位于称为(调用)堆栈的区域中,但这只是一种流行的调用约定,而不是语言所要求的

现在,编译器也可以自由地只在寄存器中存储
a
,因为它注意到地址从未被取过,在这种情况下,它从未在传统意义上的内存中


编译器可以进一步自由地注意到,
a
从未被明显地使用过,并且不必费心发出
函数

中的任何代码,因为它实际上没有指定。我将首先描述这个幼稚的案例,然后解释为什么它可能并不真正适用

天真地说,存储在中的内存
a
仍然存在,尽管名称
a
函数
之外不再可访问。内存可能包含也可能不包含
10
-编译器可以随意覆盖它,也可以不费事。显然,它也可以在以后的任何时候作为其他东西重复使用

如果
a
确实是在内存中分配的,那么它可能位于称为(调用)堆栈的区域中,但这只是一种流行的调用约定,而不是语言所要求的

现在,编译器也可以自由地只在寄存器中存储
a
,因为它注意到地址从未被取过,在这种情况下,它从未在传统意义上的内存中


编译器还可以进一步自由地注意到,
a
从来没有被明显地使用过,而且当函数结束时,
函数

中的任何代码基本上都消失了(更准确地说,当它们的块结束时,它们消失了)


谈论他们“最后的价值”仍然“在记忆中”是一个毫无意义的练习,因为有可能他们的价值从一开始就不在记忆中。即使有,也不能保证它仍然存在,或者在任何意义上都可以访问内存。

当函数结束时,它的所有局部变量基本上都消失了(更准确地说,它们在块结束时消失)


谈论他们“最后的价值”仍然“在记忆中”是一个毫无意义的练习,因为有可能他们的价值从一开始就不在记忆中。即使它存在,也不能保证它仍然存在,或者在任何意义上都可以访问内存。

a将在函数返回后立即被销毁
a
仅存在于函数内部。每次调用函数时,它都会出现,并在每次退出时消失。了解范围解析:auto、static和globalcould可能是个问题如果你有一个非常好的编译器,那么会发生的一切就是它返回0。a将在函数返回后立即被销毁
a
只存在于函数内部。每次调用函数时它都会存在,每次退出时它都会消失。请阅读有关作用域解析的内容:auto、static和globalcould如果你有一个非常好的编译器,那么问题是它会返回0。在谈论存储持续时间时,请使用automatic(堆栈)和dynamic(堆)。堆栈和堆只是常见的实现。我想欢迎使用自动溢出@塔德曼,可爱。但是,当将C++例程引入到C++中时,“自动存储持续时间”仍然是正确的。“堆栈”不一定是。在谈论存储持续时间时,请使用自动(堆栈)和动态(堆)。堆栈和堆只是常见的实现。我想欢迎使用自动溢出@塔德曼,可爱。但是,当将C++例程引入到C++中时,“自动存储持续时间”仍然是正确的。“堆栈”不一定是。