C++面试常见关键字总结
1.static
static是一种关键字,通常用来修饰局部变量、全局变量/函数、类内成员变量/函数这几种,使其变成静态。
1.1对局部变量修饰
使其生命周期不再是当前作用域,而是整个程序的生命周期,函数内局部变量储存在栈中,使用static修饰后储存在静态储存区。
1.2对全局变量修饰
使全局变量只能在本文件中被使用、不能被其他文件访问。
1.3对类内成员变量修饰
被static修饰的类内成员变量需要在类外进行初始化,且使其所属变为类,而不是任何一个对象或函数,初始化时需标明所属类。
1.4对类内成员函数修饰
与类内成员变量被修饰差不多,也是使其所属变为类,不过静态成员函数只能访问静态成员变量,不能访问非静态成员变量或函数,因为没有this指针。
2.extern
2.1extern “C”
//标明fun函数用C语言风格去编译和链接
extern "C" void fun();
2.2 extern + 变量/函数
一般只在头文件中声明,且不进行定义,因为若是有多个文件包含头文件,则会连接报错
//标明该变量或函数可以在本文件或者其他文件中使用
//test.h
extern int g_a;
3.const
3.1 const修饰变量
const修饰的变量需要在声明时初始化,因为后面就无法再修改了
int a = 10;
const int b = 20;//b的值不能被修改
const int * p = &a;//不能修改p指向的a的值
int * const q = &a;//不能修改q所指向的,也就是q只能指向a
3.2 const在函数中使用
修饰函数返回值:
如果修饰的返回值是临时变量,则无意义
修饰的是指针或引用类型的返回值,则返回值只能被赋值给被const修饰的同类型指针或引用
修饰函数参数:
void func(const int a);
// 传递的参数在函数中不可改变
void func(const char* a);
// 参数所指向的内容为常量不可变
void func(const T& a);
// 传的引用不能被修改
3.3 const在类中使用
修饰成员变量:
class test
{
public:
const int val = 10;//成员常量不能被修改
test(int a = 20) :val(a){};//只能在初始化列表中赋值
};
int main()
{
int p = 50;
test test1(p);
cout << test1.val;//50
return 0;
}
修饰成员函数:
1、const对象只能访问const成员函数,非const对象可以访问任意成员函数
2、const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。
3、mutable修饰符的数据成员,对于任何情况下通过任何手段都可修改
4、const关键字不能与static关键字同时使用,因为static关键字修饰静态成员函数,静态成员函数不含有this指针,即不能实例化,const成员函数必须具体到某一实例。
3.4 将const强制转为非const
采用const_cast 进行类型转换。