首页 > 代码库 > C++之易混淆知识点一

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的指针和用引号括起来的字符串常量都被解释为字符串的第一个字符的地址。