以下是我的个人见解,有不对的地方还请指出。
一。变量、变量名、标识符的区别
变量
变量提供了程序可以操作的有名字的存储区。C++ 中的每一个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储于该内存中的值的取值范围以及可应用在该变量上的操作集。
变量名
变量名,即变量的标识符,可以由字母、数字和下划线组成。变量名必须以字母或下划线开头,并且区分大小写字母:C++ 中的标识符都是大小写敏感的。
标识符
名字。每个标识符都是字母、数字和下划线的非空序列,且序列不能以数字开头。标识符是大小写敏感的:大写字母和小写字母含义不同。标识符不能使用C++中的关键字,不能包含相邻的下划线,也不能以下划线后跟一个大写字母开始。
以上摘自<<C++ Primer>>(第四版)
而我的理解是
1.变量就是一个实体,它指向存储中的某个特定的位置。
2.变量名则是变量的一个名字
3.标识符就是一个字符串。
二。定义和声明
声明
声明用于向程序表明变量的类型和名字。
定义
变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。
注意:
1.定义也是声明:当定义变量时我们声明了它的类型和名字。因此可以通过使用extern关键字声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern:
extern int i; // declares but does not define i
int i; // declares and defines i
3.初始化式必须要有存储空间来进行初始化,所以,如果声明有初始化式,那么它可被当作是定义,即使声明标记为 extern
extern double pi = 3.1416; // definition
此外,当我使用using声明 的时候:
#include<iostream>
namespace aa{
int a = 1;
}
int main(){
using aa::a;
int a = 1;
}
编译会报错,我猜想是不是因为变量名的冲突导致的,而不是因为重复定义。
因为 ,一个 using 声明一次只引入一个命名空间成员,它使得无论程序中使用哪些名字,都能够非常明确。