C++面试总结(一)常用关键字

1.简述volatile的用法

   有些变量是用volatile关键字声明的。当两个线程都要用到某一个变量且该变量的值会被改变时,应该用volatile声明,该关键字的作用是防止优化编译器把变量从内存装入cpu寄存器中。volatile的意思是让编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值。

2.简述extern的用法

   (1)在c++中,用来指定使用另一语言进行链接,这时需要与特定的转义符一起使用。

extern "c" 声明语句
extern "c" {声明语句块}

 告诉编译器该段代码以C语言进行编译。

 (2)extern string lpdd;

  声明lpdd,但是不分配内存,只说明他是你可以用的变量,在此程序之外其他的程序中已经声明了它。其实它就是防止名字冲突。被其修饰的变量(外部变量)是静态分配的,即程序开始时分配,结束时释放。

  extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”

//A.cpp

extern int i;

int main()

{

i=100;//试图使用B中定义的全局变量

}

//B.cpp

int i; //定义全局变量i

拓展:定义和声明

(1)变量的定义:变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。

(2)变量的声明:用于向程序表明变量的类型和名字。程序中变量可以声明多次,但只能定义一次。

两者联系与区别:

(1)定义也是声明,因为当定义变量时我们也向程序表明了它的类型和名字;

(2)但声明不是定义,可以通过使用extern关键字声明变量而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern;

3.简述static的用法

(1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

(2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其他函数访问。它是一个本地的全局变量。

(3)在模块内,一个被声明为静态的函数只可被这一模块内的其他函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

(4)类内的static成员变量属于整个类所拥有,不能在类内进行定义,只能在类的作用域内进行定义。

(5)类内的static成员函数属于整个类所拥有,不能呢个包含this指针,只能调用static成员函数

static全局变量与普通的全局变量有什么区别:static全局变量只初始化一次,防止在其他文件单元中被引用。

static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次的结果值。

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每次调用中维持一份拷贝。

static变量的存储位置:

①static无论是全局变量还是局部变量都存储在全局/静态区域,在编译期就为其分配内存,在程序结束时释放。

②const全局变量存储在只读数据段,编译期最初将其保存在符号表中,第一次使用时为其分配内存,在程序结束时释放。

③全局变量存储在全局/静态区域,在编译期为其分配内存,在程序结束时释放。

④局部变量存储在栈中,代码块结束时释放。

注:当全局变量和静态局部变量未赋初值时,系统自动置为0。

4.new/delete是函数吗?它们和malloc/free有何区别?
答:new/delete是C++中的运算符,malloc/free是C标准库中提供的函数。他们都是用于动态申请内存和释放内存的组合。它们的主要区别有: 
1.malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符 
2.new能够自动分配空间大小 
3.对于用户自定义的对象而言,用maloc/free无法满足动态管理对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++需要一个能对对象完成动态内存分配和初始化工作的运算符new,以及一个能对对象完成清理与释放内存工作的运算符delete—简而言之 new/delete能进行对对象进行构造和析构函数的调用进而对内存进行更加详细的工作,而malloc/free不能。

5.const关键字有哪些用途,它和static有哪些区别?
答:对于const关键字,它主要是用来定义一个只读变量。 const关键字至少有下列n个作用: 
(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了; 
(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const; 
(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值; 
(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量; 
(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。

6.explicit关键字的作用? 
关键字explicit只能作用于只有一个实参的构造函数(需要多个实参的构造函数不能用于执行隐式转换,所以无须将这些构造函数指定为explicit的)。只能在类内声明构造函数时使用explicit关键字,在类外部定义时不应重复。 
当使用explicit关键字声明构造函数时,它将只能以直接初始化的形式使用。而且,编译器将不会在自动转换过程中使用该构造函数。

猜你喜欢

转载自blog.csdn.net/qq_36086861/article/details/84342007
今日推荐