文章目录
C/C++ 关键字 const,static,extern
1.const
const 字面意思:常量,不变的量
const 的作用:
a.常量的定义
const int a = 5;
b.修饰函数形参
void function(const int &a ){
......
}
主要作用就是不想再传参数时为参数复制一个副本
还想不改变这个参数(比如只对数据做一些比较,并不改变或者生成变量)
跟第一条作用类似
c.修饰类的成员函数
class MYCLASS
{
public:
int GetCount() const;
};
目的:const 修饰的成员函数无法修改任何成员变量
当不小心调用了非const 成员函数或变量时编译器会报错
d.const 修饰返回值
表示返回值不能被直接修改,函数返回值只能被const 修饰的变量接受
const char* GetChar(){
......
}
/* 错误演示 */ char* CHAR = GetChar();
/* 正确演示 */ const char* CHAR = GetChar();
总之,在编程中要尽可能多的使用const,这样可以获得编译器的帮助,以便写出稳定的代码
2.static
static 字面意思:静止的,不动的,(个人理解静态就是本地化)
static 的作用:
a. 在函数体内
在函数体内,一个被 static 修饰的变量在这一函数被调用的过程中维持不变,
比如之前的博客:编写一个函数,每调用一次,输出+1
b.在模块内,函数体外
在模块内,但在函数体外,被 static 修饰的变量可被模块内的所有函数调用
不能被模块外的函数访问,(本地全局变量)
例如
在 myclass.h 中定义了 static int a;
在 myclass.cpp 中,a = 5; //报错
c.在模块内
在模块内,被static 修饰的函数只可以被当前模块内的其他函数调用
(这个函数被限制在声明它的模块的本地范围内使用)
3.extern
extern可以置于变量或者函数前,以表示这个变量或函数定义在别的文件中,提示编译器在遇到此变量或函数的时候在其他模块寻找其定义。
主要使用方式有两种:
a.函数的声明中带有extern
如果函数的声明中带有extern,说明这个函数定义在其他文件中,
这样的好处是可以取代include”*.h”,在一些复杂的项目中这样使用比较方便
b.extern “C”
C++ 在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个函数中间名,而 c 语言则不会,因此会造成连接时找不到对应函数的情况。( 这也是为什么 C 语言不支持函数重载而 C++ 支持重载 )
此时 c 函数就需要用 extern “C” 进行链接制定,这告诉编译器,请保持c语言原来的名称,不要生成用于链接的中间函数名。