C++进阶知识二
Posted 同学笑了么
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++进阶知识二相关的知识,希望对你有一定的参考价值。
20.x86平台的cpu有4个优先级,分别称为ring0,ring1,ring2和ring3.ring0是最高优先级,低优先级的代码不能读取高优先级的内存空间,一些特殊的操作只能在高优先级的情况下才能调用。这种优先级实现了很好的内核保护机制。程序在进行操作系统内核调用时,程序会从低优先级运行到高优先级,内核调用返回时会从高优先级变为低优先级。
21.volatile关键字的作用:C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量。
22.一般的关键字都定义在数据类型的前面,像static,const,volatile等。转储文件就是dmp文件。
23.Rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit一般都和木马、后门等其他恶意程序结合使用。Rootkit通过加载特殊的驱动,修改系统内核,进而达到隐藏信息的目的。
24.动态链接库是模块化的重要技术手段。在应用程序设计时,尽量将基础、公共的代码放置在dll中。如果开发的应用程序需要向其他应用程序提供支持,可以像sdk一样定义一系列头文件,在生成dll文件时,同时生成lib库文件。
25.syntax:句法,语言结构。synchronous:同步,asynchronous:异步
26.静态局部变量:
(1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放.
(2) 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的 值。而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
(3) 如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。而对自动变量来说,如果不赋初 值,则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。
(4) 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。
<27>运算符重载本质上是操作具有基础数据类型的成员函数。参数为什么使用引用,因为防止重新拷贝一份,对资源造成浪费。
<28>当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。
<29>静态全局变量和全局变量的区别,静态全局变量只能在定义它的文件中使用,而全局变量使用extern关键字,可以在工程的其他文件中使用。
<30>#pragma pack() 能够取消自定义的对齐方式,恢复默认对齐。
<31>位图是windows用来储存设备无关和应用程序无关的图片的标准格式。
gif是web网页上常见的图片格式,gif适用于线条图形,具有实色的图片和色彩之间具有明显界限的图片。
jpeg是一种压缩结构,适用于自然景观图片。例如扫描的照片。
因为值相同的两个指针,所指向的变量的值可以不同,就是指针移动的字节数量不同,可能读取出不同的值。可以参考这篇文章(https://www.cnblogs.com/chanabi/p/9228998.html)
<34>Byte = 字节,bit = 位(二进制)
<35>static全局变量要定义在源文件中而不是定义在头文件中, 如果定义在头文件中,被其他源文件包含,其实是产生了两个变量。操作上互不干涉。
<36>为什么要有get和set方法:
比如 setAge(int age){ if(age<1||age>120) throw new Exception(” 你输入的年龄不合法”); }else{ this.age=age; } 这个是public变量做不到的。
如果你的变量score代表的是一个学生的数学成绩,理论上,分数只可能是0-100的整数,如果你把将score设为public,不用get()和set(),那么用户很可能会输入1-100以外的数字,如果你把将score设为privata,再用setScore()来设置分数,你就完全可以控制这种行为了。
就是遵循面向对象设计原则,设计者尽量隐藏类的内部实现细节,只对外提供接口;使用者不关心类的内部设计,只关注提供的功能。
控制类属性的合法性和正确性,防止类的属性被赋予非法值或恶意攥改。
<37>enum使用时要注意的细节:
第一个枚举成员的默认值为整形的0,枚举型是预处理指令#define的替代。用typedef定义的时候,比如
typedef enum Day
{
satarday,
monday
}Day; 前后的Day都可以省略。
<38>c语言的struct里面不能定义函数,只能定义指向函数的指针,c++的struct里面可以定义函数,C++的struct和class唯一不同点在于struct成员默认是公有的,class默认是私有的。
<39>c++中为什么struct默认是public,class默认是private?
struct的设计目的是让外部的程序访问其数据成员,class设计的目的是不让外部程序直接访问数据成员。
以上是关于C++进阶知识二的主要内容,如果未能解决你的问题,请参考以下文章
C++初阶:模板进阶非类型模板参数 | 模板的特化 | 模板分离编译