C/C++重难点解析之关键字(二)

本文详细介绍了C/C++中的static关键字,包括静态局部变量、静态全局变量和静态成员变量及函数的特性。接着讲解了typedef的作用,用于简化数据类型名称。接着讨论了inline关键字在内联函数中的应用及其优势和限制。最后,提到了struct与class在声明类时的访问权限区别。
摘要由CSDN通过智能技术生成

本文继续总结关键字,对static、typedef、inline、struct进行总结。
1、static关键字
static用来声明静态变量,被static声明的静态变量和类的static成员保存在静态存储区。静态变量又分为静态局部变量和静态全局变量。
静态局部变量:
静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;它始终驻留在静态存储区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;
静态全局变量:
未经初始化的静态全局变量会被程序自动初始化为0;静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;静态变量都在全局数据区分配内存。
对普通变量和函数来说,被static修饰后都只在当前文件中可见,即使使用extern关键字也无法使用外部文件的static对象,这是明显区别于普通变量和函数的地方。
静态成员变量:
静态成员变量属于整个类所有
静态成员变量生命期不依赖于任何对象
可以通过类名直接访问公有静态成员变量
所有对象共享类的静态成员变量
另外静态成员变量与上述的静态变量一样存储于静态存储区,当然也可以叫全局数据区,一个意思。
静态成员函数:
可以类比静态成员变量,得出相似的结论:
静态成员函数是类中特殊的成员函数
静态成员函数属于整个类所有
可以通过类名直接访问公有静态成员函数
可以通过对象名访问静态公有成员函数
可以通过表格的形式对普通成员函数和静态成员函数做一个对比:

这里写图片描述

2、typedef关键字
typedef关键字是用来给数据类型重命名的,它可以将复杂的数据类型简单化,使代码更加简洁。例:

//将unsigned类型重新命名为u类型
typedef unsigned u;
//将LinkList类中泛指T类型的Node重命名为Node
typedef typename LinkList<T>::Node Node;

上面第二行代码说明typedef不仅可以用来给基本数据类型重命名,还可以给自定义的类类型重命名,这样可以瞬间简化复杂类型。

3、inline关键字
inline关键字用来声明内联函数,C++中推荐使用const、inline来代替宏代码片段。通常将功能简单,规模较小又频繁使用的函数声明为内联函数。这可以提高代码的运行效率,因为内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处,这样节省了参数传递、控制转移等开销。
内联函数声明:

inline type functionname(形参)
{
//语句块
}

内联函数的一些特性:
内联函数声明时,inline关键字必须和函数定义结合在一起,否则编译器会直接忽略请求。
内联函数没有普通函数调用时的额外开销,压栈、跳转、返回等。
c++开发首选内联函数,而不是宏代码块。
现代C++编译器能够进行编译优化,一些函数即使没有inline声明也可能被内联编译,这是默认的。
注意事项:
inline内联编译的限制:
不能存在任何形式的循环语句。
不能存在过多的调件判断语句。
函数体不能过于庞大。
不能对函数进行取址操作。
函数的内联声明必须在调用语句之前。
当然这些限制因编译器而定,对于先进的编译器有些限制不存在了。

4、struct关键字
其实在C++中struct也是类的声明关键字,它和class唯一的区别就是默认访问级别不同:
用struct定义类时,所有成员的默认访问级别为public。
用class定义类时,所有成员的默认访问级别为private。
其它特性与class完全相同。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值