全局数组 不能被delete;
作用域:区分名字的不同意义的上下文。
C++中大多数作用域是用花括号界定的,名字从其声明点到声明所在作用域结束处都是可见的。
#include <iostream>
int main()
{
int sum=0;
for(int val=1;val<10;val++)
sum++;
return 1;
}
名字main在花括号外,在整个程序都可见。定义在所有函数外部的名字 具有 全局作用域(global scope)。
sum 有局部作用域(local scope) 。就算在头文件中有局部变量的 extern声明,也不是全局变量,不能被其他文件使用。
val只在for语句中使用 , 有 语句作用域(statement scope)。
全局变量 ,又称 外部变量, 在编译时,全局变量对文件内部可见,链接后,(编译产生的obj文件被合并到一起)全局变量的可见范围被扩大到了整个程序。
所以文件中定义的全局变量若 重名的话,会在链接时出现重复定义的错误。
但是由于编译器的目光不够长,编译阶段全局变量可见域只在文件中,所以全局变量不能在程序的任何地方被使用,这就用到了extern 来声明一个变量。告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”
extern 关键字作用于局部变量 没有效果。
const :
const in defaultsize=30;//定义defaultsize为常量,初始化为30。defaultsize是一个不可修改的左值。 因为不可修改,所以定义时必须初始化。
const 对象默认为文件的局部变量。
在全局作用域中定义非const变量时,在整个程序中都可以访问。
int counter;//file1.cpp 定义在全局作用域的全局变量。非const变量默认为extern
extern int count;//file2.cpp 声明
++counter;// file2.cpp使用。
在全局作用域声明的const的对象是定义该对象的文件的局部变量。 只能在那个文件中使用,不能被其他文件访问。
通过extern制定const变量为extern(定义时),就可以在整个程序中被访问。
extern const int defaultsize=30;//file1.cpp定义
extern const int defaultsize;//file2.cpp 声明