当助教过程中发现不少学生基础问题没有搞清楚,于是想把自己的读书笔记啦之类的整理一下放到博客上,也当是自己复习一遍。

 

第一篇先来对比一下C++里定义和声明的区别。

 

首先先看《C++ Primer》里的原文:

 

 

In order for multiple files to access the same variable, C++ distinguishes between declarations and definitions.

为了使不同的文件都可以访问同一个变量,C++会区分变量的声明(declarations)和定义(definitions)。

 

 

A definition of a variable allocates storage for the variable and may also specify an initial value for the variable. 

There must be one and only one definition of a variable in a program.

变量的定义会为这个变量分配存储空间,并且可能会为其指定一个初始化的值。在程序里,一个变量必须有一个,也只能有一处定义。

 

 

A declaration makes known the type and name of the variable to the program. 

A definition is also a declaration: When we define a variable, we declare its name and type. 

We can declare a name without defining it by using the extern keyword. 

A declaration that is not also a definition consists of the object's name and its type preceded by the keyword extern

变量的声明会将变量的类型和名称传达给程序。当然,定义也是一种声明:当我们定义一个变量的时候,我们当然也声明了他的名称和类型。我们可以通过使用“extern”关键字来声明一个变量,而不用定义它。声明的形式就是在对象(变量)的名字和类型前面,加上关键字“extern”

 

 

A declaration may have an initializer only if it is also a definition because only a definition allocates storage. 

The initializer must have storage to initialize. 

If an initializer is present, the declaration is treated as a definition even if the declaration is labeled extern

声明时你可以给变量初始化。但是一旦你这样做,那么这句话也就变成了定义,因为只有在定义的时候才会为变量分配内存。初始化的时候必然要为初始值分配存储空间。如果你在声明的时候同时初始化了变量,即便“extern”关键字存在,这个语句也会认为是定义。

 

 

声明和定义之间的区别看似有些卖弄学问的嫌疑,但是其实是非常重要的。在C++里,变量必须被定义一次,最多一次,至少一次,而且必须在使用前定义或者声明。另外,系统何时为变量分配空间,如何管理你的内存对一个C++程序员来讲更为重要(相对于别的拥有垃圾回收机制的语言来说e.g. Java)。

 

我一直认为重视基础始终是有益无害的。即使现在再回头重看《C++ Primer》,依然会有新的收获,共勉。