腾讯实习面试

本文详细介绍了C++中的static关键字,包括它的作用域限制和生存期限制,以及在不同情况下的使用示例。文章讨论了static用于全局变量、局部变量和函数的影响,强调了它在类成员中的特殊意义,如静态成员变量和静态成员函数。同时,文章还解答了关于static变量初始化、静态成员函数与非静态成员函数的区别、以及为何不能在类内部初始化静态成员变量等问题。最后,文章提到了const和extern关键字的相关知识以及在进程、线程和协程中的概念。
摘要由CSDN通过智能技术生成

2021.5.21

1、char、short、int占几个字节?char范围?

int:4个字节、short:2个字节、char:1个字节、char*:8个字节、long:8个字节、double(双精度浮点数):8个字节、float(单精度浮点数):4个字节;

char范围:-128~127(-2^7~2^7)

int范围:-2^31~2^31;

2、C++中static关键字

static常用的两个作用,一个是作用域限制,一个是生存期限制。

对函数来说:
作用域限制:被static修饰的函数,只能用于代码本身文件的调用。
生存期限制:对函数来说,这条是用来说类的静态成员函数的。在类对象出生前,类的静态成员函数就活着了。

C/C++共有

  1. 修饰全局变量时,表明一个全局变量只对定义在同一个文件中的函数可见;
  2. 修饰局部变量时,表明该变量的值不会因为函数终止而消失;
  3. 修饰函数时,表明该函数只在同一文件中调用;
  4. static修饰的变量默认初始化为0。包括未初始化的全局静态变量和局部静态变量,另外未初始化的全局变量也具备这一属性,因为未初始化的全局变量与未初始化的静态变量存储在同一区域内(BSS,全局(静态)存储区,BSS的特点是在程序执行之前BSS会自动清0)。

C++独有

  1. 修饰类的数据成员,表明该类所有对象这个数据成员只有这一个实例,该实例归所有对象所有。静态成员变量可以直接通过类名访问,也可以通过类的对象访问;静态成员变量单独分配在全局存储区;
  2. 修饰类的成员函数,类的静态成员函数只能访问类的静态成员变量和全局变量;类的静态成员函数没有this指针;如果要通过静态函数访问类的非静态成员变量,那么可以将类的对象作为参数传递给该静态函数,然后在静态函数中引用这个对象,并调用其动态方法。

问题:(1)在头文件把一个变量申明为static变量,那么引用该头文件的源文件能够访问到该变量吗。

答:可以。声明static变量一般是为了在本cpp文件中的static变量不能被其他的cpp文件引用,但是对于头文件,因为cpp文件中包含了头文件,故相当于该static变量在本cpp文件中也可以被见到。当多个cpp文件包含该头文件中,这个static变量将在各个cpp文件中将是独立的,彼此修改不会对相互有影响。

(2)为什么静态成员函数不能申明为const

答:这是C++的规则,const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall,而类中的static函数本质上是全局函数,调用规约是__cdecl或__stdcall,不能用const来修饰它。<span style="line-height:26px">一个静态成员函数访问的值是其参数、静态数据成员和全局变量,而这些数据都不是对象状态的一部分。而对成员函数中使用关键字const是表明:函数不会修改该函数访问的目标对象的数据成员。既然一个静态成员函数根本不访问非静态数据成员,那么就没必要使用const了。

(3)为什么不能在类的内部定义以及初始化static成员变量,而必须要放到类的外部定义

答:因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。

(4)static关键字为什么只能出现在类内部的声明语句中,而不能重复出现在类外的定义中

答:如果类外定义函数时在函数名前加了static,因为作用域的限制,就只能在当前cpp里用,类本来就是为了给程序里各种地方用的,其他地方使用类是包含类的头文件,而无法包含类的源文件。这样就导致无法在其他地方调用这个静态的类成员函数。如果要解决这个办法,就是在头文件中加extern。然而extern和static是一对儿对立的关键字,不能用在一起。

(5)为什么常量静态成员数据的初始化可以放在类内(注意:只有静态常量整型数据成员才可以在类中初始化)

答:static数据成员在类外定义和初始化是为了保证只被定义和初始化一次,这样编译器就不必考虑类的函数里面第一个对static变量的’=’操作是赋值还是初始化了。 static const int可以在类里面初始化,是因为它既然是const的,那程序就不会再去试图初始化了。

(6)为什么静态成员函数只能访问静态成员变量。

答:1.静态成员函数只属于类本身,随着类的加载而存在,不属于任何对象,是独立存在

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值