C++学习过程中的一些值得注意的小点(1)-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、内联函数

1.1内联函数的定义

inline修饰的函数叫做内联函数编译时C++编译器会在调用内联函数的地方展开没有函数调用建立栈帧的开销内联函数提升程序运行的效率。

call指令表明Add函数在被调用的时候建立了栈帧。如果在上述函数前增加inline关键字将其改为内联函数在编译期间编译器会用函数体替换函数的调用。

1.2内联函数的特性

1.2.1优点

咋一看内联函数与宏定义的作用好像很相似他们的功能确实相似但是内联函数克服了宏定义的一些缺点。首先内联函数克服了宏定义不可调试的缺点内联函数可以通过调试进到函数体的内部观察函数体中代码的逻辑运行。再一个内联函数函数体内的写法跟一般函数没有任何区别因此内联函数克服了宏定义代码可读性差、维护性差、没有安全类型检查等等缺点。加上内联函数少了栈帧的开销一定程度上提高了程序的运行效率。

1.2.2缺点

inline是一种以空间换时间的做法如果编译器将函数当成内联函数处理在编译阶段会用函数体替换函数调用但这种做法的缺陷就是可能会使目标文件变大导致文件在网络传输的过程中传输速度变慢有一个例子就是用户在下载软件的时候文件会很大导致下载时间很长导致用户体验降低这是很不利的影响。

1.2.3使用方式说明

鉴于内联函数的缺点因此类中的函数在定义的时候短小的函数一般不超过十行可以考虑定义为内联函数代码量大的函数就不要定义成内联函数了。但我们其实也不必担心因为现在的编译器已经十分的“聪明”了。lnline说明只是向编译器发出的一个请求是否将函数定义为内联函数还是取决于编译器自己的判断。

需要着重注意的是内联函数不要声明和定义分离分离会导致链接错误。因为inline被展开就没有函数地址了链接就会找不到。

二、类和对象中值得注意的一些小点

1.在C++中类型就是类名在定义变量时变量名前不需要加struct

2.struct默认访问限定符为publicclass默认访问限定符为private。

3.默认直接在类中定义的函数就是inline但实际上取决于编译器。

正确的用法短小的函数直接在类中定义长的函数声明和定义分离。

4.C++中实例出来的对象的大小只需要考虑成员变量的大小和内存对齐成员函数属于类成员函数的地址存储在公共代码区。

从上面的代码可以看到类实例化出来的对象大小只包含了成员变量的大小当然也会涉及内存对齐 内存对齐在前面的博客中已有详细介绍不包含成员函数的大小。

5.无成员变量的类对象大小开一个字节不存储有效数据用来标识这个对象存在过

6.成员函数的参数会隐式的多一个类类型的this指针this指针指向创建出来的对象的首地址。

this指针本质是一个形参存在栈区上。不能够显式地传this指针否则会报编译错误。

7.默认构造函数注意点内置数据类型不处理int,double......自定义类型会去调用它的默认构造函数如果自定义类型没有默认构造函数会报编译错误。

一般情况下我们都要自己写构造函数

成员都是自定义类型或者声明时给了缺省值可以考虑让编译器自己生成构造函数

8.默认析构函数

默认生成的析构函数行为跟构造类似

内置类型成员不做处理自定义类型成员会去调用它的析构函数

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: c++