c++的作用域,以及在不同的作用域下定义不同的变量会有什么区别。

c++的作用域,以及在不同的作用域下定义不同的变量会有什么区别。,第1张

目录

1.c++有哪些作用域

2.不同的作用域下定义不同的变量会有什么区别

静态局部变量:属于局部作用域。


它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。


(即被static 关键字修饰过的变量是具有记忆功能的)。


3.全局变量在定义是需要注意的问题。


(博主在面试的时候被问到过)

 4.总结


1.c++有哪些作用域

c++的作用域可以分为6种,分别是:全局作用域,局部作用域,类作用域,名字空间作用域,语句作用域和名字空间作用域。


2.不同的作用域下定义不同的变量会有什么区别
  • 全局变量:属于全局作用域。


    全局变量只需在一个源文件中定义,就可以作用于所有的源文件。


    如果其他不包含该全局变量定义的源文件需要用extern 关键字再次声明这个全局变量,就可以在其他的源文件中使用了。


  • 静态全局变量:属于文件作用域。


    它与全局变量的区别在于如果程序包含多个文件的话,它属于定义它的文件里,不能extern 关键字再次声明这个全局变量作用到其它文件里,即被static 关键字修饰过的变量具有文件作用域。


    这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。


  • 局部变量:属于局部作用域。


    它是自动对象(auto),在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。


    (个人认为局部作用域包含语句作用域)。


  • 静态局部变量:属于局部作用域。


    它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。


    (即被static 关键字修饰过的变量是具有记忆功能的)。


  • 类内的普通变量:属于类作用域 ,属于类中定义的某个具体对象。


  • 类内的静态变量:属于类作用域,它不属于某个具体对象,它属于整个类。


    (静态成员函数只能调用类内的静态变量)。


3.全局变量在定义是需要注意的问题。


博主在面试的时候被问到过

如果在头文件中定义全局变量,当该头文件被多个文件 include 时,该头文件中的全局变量就会被定义多次,导致重复定义,因此不能再头文件中定义全局变量。


 4.总结

c++为什么有那么多作用域,而且定义变量的时候还要考虑那么多因素,不麻烦吗?

先说原因:不同区域存放的数据,赋予不同的生命周期,让我们的编程更加灵活。


(面试官问时候就这样对答就很nice了)。


  我刚学c++的时候也被这些作用域和变量搞迷迷糊糊的,我的建议是初学者不用太刻意去记忆,用到的时候自然就懂了。


实践出真知,初学c++一定要多敲代码。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/584864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存