深入学习C++

来源:互联网 发布:重庆鸿巨网络怎么样 编辑:程序博客网 时间:2024/06/15 16:31

1.定义和声明的区别:

定义声明只能出现一次(系统会为其分配存储空间:所有对该变量的使用都关联到同一存储空间)可以出现多次一般不应该放在头文件里,
因为可能会被同一project中不同文件包含多次从而导致多重定义链接错误!
但有三类例外:类、值在编译时就已知的const对象、inline函数。
因为这三类的实体可以在多个源文件中定义,只要每个源文件中的定义是相同的即可。
另一方面,需要在头文件中定义这三类实体,也是因为编译器需要它们的定义(不只是声明)来产生代码。
const对象可以在头文件中定义的另外一个原因是const对象定义默认为从属于定义该对象的文件的局部变量。
(常量表达式是编译器在编译时能够计算出结果的表达式。
当const整型变量通过常量表达式自我初始化时,const变量要成为常量表达式必须满足初始化式是每个文件都可见的。)
而为了能够让多个文件使用相同的常量值,const变量和它的初始化式必须是每个文件都可见的。
因此一般把const变量定义在头文件中,使得无论何时使用,编译器都能看见其初始化式。
most编译器在编译时会用相应的常量表达式替换这些const变量的任何使用,所以实践中不存在任何存储空间用于存储
用常量表达式初始化的const变量。
如果const变量不是用常量表达式初始化的,就不能在头文件中定义。而应该在一个源文件中定义并初始化,同时在
头文件中为其添加extern声明,以使其能被多个文件共享。 
如何区分定义和声明:

相同点:变量名前都有类型;

区分处:有初始化式(有初始值)——表示这是定义;
                没有用extern修饰符修饰——表示这是定义。

0 0