etern和const关键字的作用.docx
extern和const关键字的作用
、extern的作用:
这样做的好处是在其他文件里面可以使用,但此时必须申明它。如:在a文件中声明了externinti;在b
这样做的好处是在其他文件里面可以使用,但此时必须申明它。如:在a文件中声明了
externinti;在b文件中可以直接使用这个变量,此时可以声明externinti告诉编译器这个
使用该变量。要在多个文件使用同一个变量的话就可以使用extern来声明。这里还要注意变量在其他文件中已经声明了。我们平时往往把声明和定义混淆了。往往都是在声明的时候就定义了,这只能在一个文件里面使用,此时的声明就是定于,不能在多个文件里使用同时
使用该变量。要在多个文件使用同一个变量的话就可以使用extern来声明。这里还要注意
extern
extern和static的区别:extern是文件级的,也就是说多个文件(只要是声明了externinti
的)都可以使用同一个变量。而static只是在文件内部使用,它声明的变量的使用范围相当于是filescope,即在该cpp文件里都可使用,在应用程序消亡的时候消亡。这里不得不
全局变量,整个应用程序下的所有文件
全局变量,整个应用程序下的所有文件;extern,必须是在都声明的情况下使用同一个变
提一下全局变量与前面两者的关系。这三个限制作用域的关键字的区别总的来说是这样的:量;static,在单个文件范围内使用。
提一下全局变量与前面两者的关系。这三个限制作用域的关键字的区别总的来说是这样的:
函数时就要使用extern关键字。因为在编译后c和C++编译器多函数的处理方式是不一样的,C++为了重载机制的运行把函数名f()的形式改成了_f_int_int。前一个int
函数时就要使用extern关键字。因为在编译后c和C++编译器多函数的处理方式是不一样
的,C++为了重载机制的运行把函数名f()的形式改成了_f_int_int。前一个int是指的参数的
函数中调用c函数的时候应该用extern声明c里的函数,再用
函数中调用c函数的时候应该用extern声明c里的函数,再用extern“声c”明c++里的函数;
在c里调用c++的函数的时候在c++里声明externC,在c里声明extern。
a、const用于指针的两种情况分析: intconst
a、const用于指针的两种情况分析: intconst*a;
file://a可变,*a不可变,int*const
a;
file://a不可变,*a可变。const是一个左结合的类型修饰符,它与其左侧的类型修饰
不可被改变。由值传递的特点可知,var在函数体中的改变。不会影响到函数外部。所以,符和为一个类型修饰符,所以,intconst限定*a,不限定a。int*const限定a,不限定*a。const限定函数的传递值参数:voidfun(constintvar);分析:上述写法限定参数在函数体中
不可被改变。由值传递的特点可知,var在函数体中的改变。不会影响到函数外部。所以,
此限定与函数的使用者无关,仅与函数的编写者有关。结论:最好在函数的内部进行限定,
此限定与函数的使用者无关,仅与函数的编写者有关。结论:最好在函数的内部进行限定,
对外部调用者屏蔽,以免引起困惑。const限定函数的值型返回值:
constintfun1();
constintfun1();
constmyclassfun2();
分析:上述写法限定函数的返回值不可被更新,当函数返回内部的类型时(如fun1),已经是一个
数值,当然不可被赋值更新,所以,此时
数值,当然不可被赋值更新,所以,此时const无意义,最好去掉,以免困惑。当函数返回
自定义的
类型时(
类型时(如fun2),这个类型仍然包含可以被赋值的变量成员,所以,此时有意义。
b.传递与返回地址:此种情况最为常见,由地址变量的特点可知,适当使用const,意义昭然。
c. const
c. const限定类的成员函数:
classclassname{
public:
public:
intfun()const;
.....
.....
}
注意:采用此种
注意:采用此种const后置的形式是一种规定,亦为了不引起混淆。在此函数的声明
中和定义中
均要使用
均要使用const,因为const已经成为类型信息的一部分。
获得能力:可以操作常量对象。