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

本文详细介绍了C++中的六种作用域,包括全局、局部、类、名字空间等,并对比了不同变量类型的特性,如全局变量、静态全局变量、局部变量和静态局部变量。强调了全局变量在定义时的注意事项,避免头文件中直接定义以防止重复。最后,总结了作用域存在的意义,鼓励实践学习C++。
摘要由CSDN通过智能技术生成

目录

1.c++有哪些作用域

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

静态局部变量:属于局部作用域。它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。(即被static 关键字修饰过的变量是具有记忆功能的)。

3.全局变量在定义是需要注意的问题。(博主在面试的时候被问到过)

 4.总结


1.c++有哪些作用域

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

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

  • 全局变量:属于全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。如果其他不包含该全局变量定义的源文件需要用extern 关键字再次声明这个全局变量,就可以在其他的源文件中使用了。
  • 静态全局变量属于文件作用域。它与全局变量的区别在于如果程序包含多个文件的话,它属于定义它的文件里,不能extern 关键字再次声明这个全局变量作用到其它文件里,即被static 关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。
  • 局部变量属于局部作用域。它是自动对象(auto),在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。(个人认为局部作用域包含语句作用域)。
  • 静态局部变量:属于局部作用域。它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。(即被static 关键字修饰过的变量是具有记忆功能的)。

  • 类内的普通变量:属于类作用域属于类中定义的某个具体对象。
  • 类内的静态变量:属于类作用域,它不属于某个具体对象,它属于整个类。(静态成员函数只能调用类内的静态变量)。

3.全局变量在定义是需要注意的问题。博主在面试的时候被问到过

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

 4.总结

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

先说原因:不同区域存放的数据,赋予不同的生命周期,让我们的编程更加灵活。(面试官问时候就这样对答就很nice了)。

  我刚学c++的时候也被这些作用域和变量搞迷迷糊糊的,我的建议是初学者不用太刻意去记忆,用到的时候自然就懂了。实践出真知,初学c++一定要多敲代码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值