C++之易混淆知识点一

1、const、mutable与volatile的区别:
const表明内存被初始化以后,程序将不能对它进行修改。
volatile则表明,即使程序代码没有对内存单元进行修改,但是里面的值也可能会发生变化。例如:将一个指针指向某个硬件位置,其中包含了来自串行端口的时间和信息,在某些情况下,硬件而不是程序可能会修改其中的内容,或者两个程序可能相互影响,共享数据。该关键字的作用就是为了改善编译器的优化能力。假设编译器发现程序在几条语句中两次使用某个变量的值,则编译器可能不是让程序查找这个编码的值两次,而是将这个值缓存到寄存器中。这种优化假设变量的值在这两次使用之间不会发生变化。如果不将变量声明为volatile,则编译器将进行这种优化,否则,相当于告诉编译器,不要进行这种优化。
mutable表明即使结构或者类变量为const,其某个成员也可以被修改。例如:
struct data
{
char
name[20];
mutable int
access;

}

const data vari={"mutalble
usage",0};
strcpy(vari.name,"abcederj"); //not
allowed
vari.access++;
//allowed

2、静态变量在整个程序执行期间都存在。
a、对于在函数外面定义的变量:其所属文件中位于该变量的定义后面的所有函数都可以使用它(文件级的作用域),并可在程序的其他文件中使用(外部链接性),而且另一个文件如果要使用这个变量,必须使用extern关键字来声明它。
b、对于文件共享的变量,应该在一个文件中不使用extern来包含其定义声明,并且在其他文件中使用extern来包含引用声明。
c、在函数的外面使用static定义的变量,其作用域是整个文件,具有内部链接性,即不能用于其他文件。
d、在代码块中定义的static变量,作用域是该代码块,即具有局部作用域和无链接性,但是在整个程序的执行期间,它都一直存在并且保持原来的值。
e、C++的函数默认为外部连接性,因此可以在文件之间共享,但是使用关键字static限定的函数的链接性是内部的,只在定义的文件中使用,而不能在其他的文件中使用。

3、在C++中,char数组名、指向char的指针和用引号括起来的字符串常量都被解释为字符串的第一个字符的地址。

C++之易混淆知识点一,布布扣,bubuko.com

时间: 2024-10-05 05:31:43

C++之易混淆知识点一的相关文章

常问易混淆知识点(嵌入式)

b 一.知识点1 a) 关键字volatile在编译时有什么含义?并给出三个不同使用场景的例子(可以伪代码或者文字描述).b) C语言中static关键字的具体作用有哪些 ?c) 请问下面三种变量声明有何区别?请给出具体含义int const *p;int* const p;int const* const p; a) 用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里 重新读取它的值,并不要随意针对它作优化. 建议使用volatile变量的

C++之易混淆知识点四---虚函数与虚继承

C++面向对象中,虚函数与虚继承是两个完全不同的概念. 一.虚函数 C++程序中只要类中含有虚拟函数,编译程序都会为此类生成一个对应的虚拟函数跳转表(vtbl),该虚拟函数跳转表是一个又若干个虚拟函数体入口地址组成的一个线性表.派生类的虚拟函数跳转表的前半部分由父类的vtbl得出,但是里面的内容不一定相同,后半部分则对应着自己新定义的虚拟函数. class Employee { protected: char *Name; int Age; public: void changeAge(int

C++之易混淆知识点五

一.解析类继承中父类与子类之间成员的访问可见度: 外部可见度:指的是被子类继承的父类成员在子类的外部访问控制度,有protected.public.private. 内部可见度:指的是被子类继承的父类成员在子类定义的方法中的内部访问控制度,有可访问(Y).不可访问(N). class A{     private:        void pvA(); protected:        void ptA()    public:        void pbA();         ....}

【干货】 PMP考试易混淆知识点(一)

话说6月的考试刚刚过去,这说明咱们9月的考试即将到临,小编为此给咱们备考9月的一群小伙伴们准备了一打干货,祝愿9月的你学有所得~ PMP考试易混淆知识点(一) 以下内容来自:51CTO  PMP微职位讲师:王安 1.项目管理.项目集.项目组合的区别. 序号 名称 管理 共同特点 实现方法 主要区别 专有特点 应用的时机 1 项目组合管理 是为了实现战略目标而对一个或多个项目组合进行集中管理. 服务与战略目标的实现 对工作优先排序提供所需资源 将相互没有依赖或关系的项目组合在一起 方便实现战略目标

C++易混淆知识点整理

// 1 /////////////////////////////////////////////////////////////////////// // 常量指针:变量不可修改,指针可修改 const int *p; int const *p; // 指针常量:指针不可修改,变量可修改 int *const p; // 指针解引用之前,一定确保已被初始化为一个确定/合适的地址 int *p; // 分配了指针p的内存,但并没有初始化,指针所指向的数据的内存不知道 // 指向数组的指针:指向

C语言指针与数组易混淆知识点(一)

一指针与数组 二指针与函数 三指针数组数组指针指向指针的指针 四程序陷阱 一.指针与数组 指针:指针本身也是一个变量,它的内容是指向的内容的地址.指针同样有类型的区分,char 的指针只能指向char型数据,int 指针指向int型数据.但是指针所占内存单元的大小(即其内容)是跟操作系统的地址位数有关,比如32位地址的系统,那么指针所占的内存单元就是4个字节,16位就是2个字节,因此,指针的类型只是限定它所指向的变量的类型,其内容所占的单元大小是与操作系统的地址位数相关,与变量类型无关. 在32

Java 易混淆知识点

1.计算机中数据存储是以字符为单位(取值-128~127),可以存储一个英文字符.数字.英文标点.因为汉字太多已超过一个字符的范围,所以必须使用双字节来存储. java语言一个char类型16位(两个字节),可以存储任何字符. 2.java的默认浮点数类型是double,当把 double类型的数字 赋值给float时,要么试用强制类型转换,要么在数字后加上f或F. 3. & 是两个数以二进制的形式,按位进行逻辑与运算. &&通常用于条件表达式中,对于两个或多个关系表达式进行逻辑与

关于网络学习中易混淆知识点的辨析

OSI参考模型的层次划分与TCP/IP的五层结构 OSI参考模型分为:物理层.数据链路层,网络层,传输层,会话层,表示层,应用层. 物理层涉及到在信道上传输的原始比特流. 数据链路层的主要任务是加强物理层传输原始比特流的功能,使之对应的网络层显现为一条无错线路.发送包把输入数据封装在数据帧,按顺序传送出去并处理接受方回送的确认帧. 网络层关系到子网的运行控制,其中一个关键问题是确认从源端到目的端如何选择路由. 传输层的基本功能是从会话层接受数据而且把其分成较小的单元传递给网络层. 会话层允许不同

C++之易混淆知识点三

最近复习算法,感到有一丝丝忘记的困惑,赶紧记下来... 一.分治法 分治法的思想就是"分而治之",很明显就是将规模比较庞大.复杂的问题进行分治,然后得到多个小模块,最好这些小模块之间是独立的,如果这些小模块之间耦合性比较大的话,需要多次计算重复的问题,从而出现了冗余,这种情况下,可以利用动态规划法,保存这些小模块问题的解,这样就避免了多次重复计算相同问题的解了.分治法的一般解题步骤包括: 根据分治法的解题思想,我们可以看到这其中需要用到递归.以斐波那契函数为例: 现在要求计算,则使用分