大佬教程收集整理的这篇文章主要介绍了c – 在控制结构块中定义变量,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
另外,我如何监视程序的确切内存使用情况及其变化(即:通过创建和销毁变量来改变内存使用情况)?
后来添加:
在下面的代码中,我知道v scope是if block,但是我想知道在if块的开始/结束或函数func的开始/结束时是否在内存中创建/销毁了v?
void func () { if (true) { int v;//automatic storage class v = 1; } }
这取决于您声明变量的位置而不是定义它.
该变量只能在您声明它的范围内访问.如果您明确传递它,但是如果它保持有效则取决于变量的存储类型,可以在范围之外访问它.
例如:静态变量在整个程序生命周期内保持活动状态,同时,
从函数返回自动变量的地址将导致未定义的行为,因为该函数返回后变量不会保持有效.
好读:
What is the difference between a definition and a declaration?
我相信您会希望获得有关动态分配对象的信息,因为自动对象只能在其范围内存活足够长时间,它们将自动销毁,因此它们通常不会导致任何问题.
对于动态对象您可以使用内存分析工具(如valgrind with Massif)或replace new
and delete
operators for your class来收集诊断信息.
编辑:解决更新的问题.
当声明它的作用域开始并且声明它的语句被执行时,就会创建v.一旦达到范围,即销毁v.
这个概念用于形成C中最广泛使用的概念之一的基础,称为Resource Allocation is Initialization(RAII).每个C程序员绝对必须知道它.
通过这个小的修改过的code sample,演示和验证对象的创建和销毁很简单:
#include<iostream> class Myclass { public: Myclass(){std::cout<<"\nIn Myclass Constructor ";} ~Myclass(){std::cout<<"\nIn Myclass Destructor";} }; void func() { std::cout<<"\nBefore Scope Begins"; if (true) { Myclass obj;//automatic storage class } std::cout<<"\nAfter Scope Ends"; } int main() { std::cout<<"\nBefore Calling func()"; func(); std::cout<<"\nAfter Calling func()"; return 0; }
输出是:
以上是大佬教程为你收集整理的c – 在控制结构块中定义变量全部内容,希望文章能够帮你解决c – 在控制结构块中定义变量所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。